Latest 25 from a total of 1,491 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Remove Ssv Valid... | 22888367 | 149 days ago | IN | 0 ETH | 0.00041974 | ||||
| Do Accounting | 22570258 | 194 days ago | IN | 0 ETH | 0.00003373 | ||||
| Do Accounting | 22563121 | 195 days ago | IN | 0 ETH | 0.00003373 | ||||
| Do Accounting | 22555986 | 196 days ago | IN | 0 ETH | 0.00003373 | ||||
| Remove Ssv Valid... | 22555873 | 196 days ago | IN | 0 ETH | 0.00013987 | ||||
| Remove Ssv Valid... | 22555869 | 196 days ago | IN | 0 ETH | 0.00013986 | ||||
| Remove Ssv Valid... | 22555865 | 196 days ago | IN | 0 ETH | 0.00013987 | ||||
| Remove Ssv Valid... | 22555861 | 196 days ago | IN | 0 ETH | 0.00013987 | ||||
| Remove Ssv Valid... | 22555856 | 196 days ago | IN | 0 ETH | 0.00013987 | ||||
| Remove Ssv Valid... | 22555852 | 196 days ago | IN | 0 ETH | 0.00013987 | ||||
| Remove Ssv Valid... | 22555848 | 196 days ago | IN | 0 ETH | 0.00013986 | ||||
| Remove Ssv Valid... | 22555844 | 196 days ago | IN | 0 ETH | 0.00013987 | ||||
| Remove Ssv Valid... | 22555840 | 196 days ago | IN | 0 ETH | 0.00013987 | ||||
| Remove Ssv Valid... | 22555836 | 196 days ago | IN | 0 ETH | 0.00013987 | ||||
| Remove Ssv Valid... | 22555832 | 196 days ago | IN | 0 ETH | 0.00013987 | ||||
| Remove Ssv Valid... | 22555828 | 196 days ago | IN | 0 ETH | 0.00013987 | ||||
| Remove Ssv Valid... | 22555824 | 196 days ago | IN | 0 ETH | 0.00013987 | ||||
| Remove Ssv Valid... | 22555820 | 196 days ago | IN | 0 ETH | 0.00013986 | ||||
| Remove Ssv Valid... | 22555816 | 196 days ago | IN | 0 ETH | 0.00013984 | ||||
| Remove Ssv Valid... | 22555811 | 196 days ago | IN | 0 ETH | 0.00013987 | ||||
| Remove Ssv Valid... | 22555807 | 196 days ago | IN | 0 ETH | 0.00013986 | ||||
| Remove Ssv Valid... | 22555803 | 196 days ago | IN | 0 ETH | 0.00013987 | ||||
| Remove Ssv Valid... | 22555799 | 196 days ago | IN | 0 ETH | 0.00013987 | ||||
| Remove Ssv Valid... | 22555795 | 196 days ago | IN | 0 ETH | 0.00013987 | ||||
| Remove Ssv Valid... | 22555791 | 196 days ago | IN | 0 ETH | 0.00013987 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Deposit | 22574393 | 193 days ago | 0.68011472 ETH | ||||
| Transfer | 22574393 | 193 days ago | 0.05126845 ETH | ||||
| Deposit | 22555561 | 196 days ago | 2,048 ETH | ||||
| Deposit | 22491841 | 205 days ago | 1.41125587 ETH | ||||
| Deposit | 22470513 | 208 days ago | 0.52522622 ETH | ||||
| Transfer | 22470513 | 208 days ago | 0.52522622 ETH | ||||
| Deposit | 22427997 | 214 days ago | 1.4875127 ETH | ||||
| Transfer | 22427997 | 214 days ago | 0.07147408 ETH | ||||
| Deposit | 22356561 | 224 days ago | 1.66341882 ETH | ||||
| Transfer | 22356561 | 224 days ago | 0.20124657 ETH | ||||
| Deposit | 22292060 | 233 days ago | 1.90761621 ETH | ||||
| Deposit | 22291694 | 233 days ago | 640 ETH | ||||
| Deposit | 22284899 | 234 days ago | 1.42354612 ETH | ||||
| Transfer | 22284899 | 234 days ago | 1.42354612 ETH | ||||
| Deposit | 22227529 | 242 days ago | 2.13948189 ETH | ||||
| Transfer | 22227529 | 242 days ago | 0.21170488 ETH | ||||
| Deposit | 22163076 | 251 days ago | 2.01159563 ETH | ||||
| Transfer | 22163076 | 251 days ago | 0.13195693 ETH | ||||
| Deposit | 22091423 | 261 days ago | 1.93551707 ETH | ||||
| Transfer | 22091423 | 261 days ago | 0.08573539 ETH | ||||
| Deposit | 22026967 | 270 days ago | 2.45874686 ETH | ||||
| Transfer | 22026967 | 270 days ago | 0.28683798 ETH | ||||
| Deposit | 22026917 | 270 days ago | 512 ETH | ||||
| Deposit | 21962538 | 279 days ago | 3.05143119 ETH | ||||
| Transfer | 21962538 | 279 days ago | 0.4909 ETH |
Cross-Chain Transactions
Latest 25 blocks (From a total of 137 blocks with 3.70 Ether produced)
| Block | Transaction | Difficulty | Gas Used | Reward | |
|---|---|---|---|---|---|
| 20553074 | 476 days ago | 72 | 0.00 TH | 29,124,247 (97.08%) | 0.009666289393419159 ETH |
| 20548002 | 476 days ago | 89 | 0.00 TH | 29,806,578 (99.36%) | 0.015764741224954857 ETH |
| 20547855 | 476 days ago | 105 | 0.00 TH | 10,673,139 (35.58%) | 0.033128265901351031 ETH |
| 20544596 | 477 days ago | 91 | 0.00 TH | 6,756,591 (22.52%) | 0.01013698679172286 ETH |
| 20543713 | 477 days ago | 187 | 0.00 TH | 13,669,049 (45.56%) | 0.038076708659912901 ETH |
| 20540932 | 477 days ago | 139 | 0.00 TH | 12,318,335 (41.06%) | 0.014602498569959457 ETH |
| 20538767 | 478 days ago | 89 | 0.00 TH | 9,236,227 (30.79%) | 0.019594696452317597 ETH |
| 20535879 | 478 days ago | 87 | 0.00 TH | 7,304,656 (24.35%) | 0.026983386105052275 ETH |
| 20534800 | 478 days ago | 120 | 0.00 TH | 11,238,755 (37.46%) | 0.043904582737564064 ETH |
| 20532251 | 478 days ago | 149 | 0.00 TH | 12,175,915 (40.59%) | 0.01143694632004512 ETH |
| 20525385 | 479 days ago | 295 | 0.00 TH | 17,329,013 (57.76%) | 0.034162829765389881 ETH |
| 20522332 | 480 days ago | 85 | 0.00 TH | 10,557,591 (35.19%) | 0.046342556300838807 ETH |
| 20522089 | 480 days ago | 181 | 0.00 TH | 12,356,712 (41.19%) | 0.030399741643939954 ETH |
| 20519138 | 480 days ago | 202 | 0.00 TH | 13,572,595 (45.24%) | 0.0181442080805559 ETH |
| 20517780 | 481 days ago | 104 | 0.00 TH | 13,713,975 (45.71%) | 0.01249129640851242 ETH |
| 20515038 | 481 days ago | 163 | 0.00 TH | 15,540,931 (51.80%) | 0.060361482291980363 ETH |
| 20513838 | 481 days ago | 105 | 0.00 TH | 9,461,946 (31.54%) | 0.017168065817190423 ETH |
| 20508736 | 482 days ago | 88 | 0.00 TH | 28,189,299 (93.96%) | 0.014662700422607206 ETH |
| 20508214 | 482 days ago | 123 | 0.00 TH | 28,340,172 (94.47%) | 0.00579594543314661 ETH |
| 20506347 | 482 days ago | 91 | 0.00 TH | 10,443,405 (34.81%) | 0.02323968801599195 ETH |
| 20505603 | 482 days ago | 105 | 0.00 TH | 8,575,579 (28.59%) | 0.034510604533253052 ETH |
| 20505110 | 482 days ago | 97 | 0.00 TH | 29,994,486 (99.98%) | 0.015980181575201163 ETH |
| 20501872 | 483 days ago | 99 | 0.00 TH | 6,879,583 (22.93%) | 0.003982912587960107 ETH |
| 20498646 | 483 days ago | 178 | 0.00 TH | 12,609,892 (42.03%) | 0.036830636130798303 ETH |
| 20497421 | 483 days ago | 99 | 0.00 TH | 8,060,233 (26.87%) | 0.028429228726533551 ETH |
Latest 25 from a total of 12801 withdrawals (16,374.271531056 ETH withdrawn)
| Validator Index | Block | Amount | |
|---|---|---|---|
| 1485937 | 22555517 | 196 days ago | 32.008452543 ETH |
| 1485936 | 22555517 | 196 days ago | 32.008493306 ETH |
| 1485935 | 22555517 | 196 days ago | 32.008481935 ETH |
| 1485934 | 22555517 | 196 days ago | 32.008515467 ETH |
| 1485933 | 22555516 | 196 days ago | 32.054547146 ETH |
| 1485932 | 22555516 | 196 days ago | 32.008497267 ETH |
| 1485922 | 22555516 | 196 days ago | 32.008483835 ETH |
| 1485921 | 22555516 | 196 days ago | 32.008488385 ETH |
| 1485920 | 22555516 | 196 days ago | 32.008470378 ETH |
| 1485919 | 22555516 | 196 days ago | 32.008478929 ETH |
| 1485918 | 22555516 | 196 days ago | 32.008481622 ETH |
| 1485917 | 22555516 | 196 days ago | 32.008474362 ETH |
| 1485916 | 22555516 | 196 days ago | 32.008527633 ETH |
| 1485915 | 22555516 | 196 days ago | 32.008450202 ETH |
| 1485914 | 22555516 | 196 days ago | 32.008460827 ETH |
| 1485913 | 22555516 | 196 days ago | 32.008521099 ETH |
| 1485912 | 22555516 | 196 days ago | 32.008433955 ETH |
| 1485911 | 22555516 | 196 days ago | 32.008438132 ETH |
| 1485910 | 22555516 | 196 days ago | 32.008425811 ETH |
| 1485909 | 22555516 | 196 days ago | 32.008451099 ETH |
| 1485903 | 22555515 | 196 days ago | 32.008442864 ETH |
| 1485902 | 22555515 | 196 days ago | 32.00846775 ETH |
| 1485901 | 22555515 | 196 days ago | 32.008442817 ETH |
| 1485900 | 22555515 | 196 days ago | 32.008469175 ETH |
| 1485899 | 22555515 | 196 days ago | 32.008529672 ETH |
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import { InitializeGovernedUpgradeabilityProxy } from "./InitializeGovernedUpgradeabilityProxy.sol";
/**
* @notice OUSDProxy delegates calls to an OUSD implementation
*/
contract OUSDProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice WrappedOUSDProxy delegates calls to a WrappedOUSD implementation
*/
contract WrappedOUSDProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice VaultProxy delegates calls to a Vault implementation
*/
contract VaultProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice CompoundStrategyProxy delegates calls to a CompoundStrategy implementation
*/
contract CompoundStrategyProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice AaveStrategyProxy delegates calls to a AaveStrategy implementation
*/
contract AaveStrategyProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice ThreePoolStrategyProxy delegates calls to a ThreePoolStrategy implementation
*/
contract ThreePoolStrategyProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice ConvexStrategyProxy delegates calls to a ConvexStrategy implementation
*/
contract ConvexStrategyProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice HarvesterProxy delegates calls to a Harvester implementation
*/
contract HarvesterProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice DripperProxy delegates calls to a Dripper implementation
*/
contract DripperProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice MorphoCompoundStrategyProxy delegates calls to a MorphoCompoundStrategy implementation
*/
contract MorphoCompoundStrategyProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice ConvexOUSDMetaStrategyProxy delegates calls to a ConvexOUSDMetaStrategy implementation
*/
contract ConvexOUSDMetaStrategyProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice ConvexLUSDMetaStrategyProxy delegates calls to a ConvexalGeneralizedMetaStrategy implementation
*/
contract ConvexLUSDMetaStrategyProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice MorphoAaveStrategyProxy delegates calls to a MorphoCompoundStrategy implementation
*/
contract MorphoAaveStrategyProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice OETHProxy delegates calls to nowhere for now
*/
contract OETHProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice WOETHProxy delegates calls to nowhere for now
*/
contract WOETHProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice OETHVaultProxy delegates calls to a Vault implementation
*/
contract OETHVaultProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice OETHDripperProxy delegates calls to a OETHDripper implementation
*/
contract OETHDripperProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice OETHHarvesterProxy delegates calls to a Harvester implementation
*/
contract OETHHarvesterProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice FraxETHStrategyProxy delegates calls to a FraxETHStrategy implementation
*/
contract FraxETHStrategyProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice CurveEthStrategyProxy delegates calls to a CurveEthStrategy implementation
*/
contract ConvexEthMetaStrategyProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice BuybackProxy delegates calls to Buyback implementation
*/
contract BuybackProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice OETHMorphoAaveStrategyProxy delegates calls to a MorphoAaveStrategy implementation
*/
contract OETHMorphoAaveStrategyProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice OETHBalancerMetaPoolrEthStrategyProxy delegates calls to a BalancerMetaPoolStrategy implementation
*/
contract OETHBalancerMetaPoolrEthStrategyProxy is
InitializeGovernedUpgradeabilityProxy
{
}
/**
* @notice OETHBalancerMetaPoolwstEthStrategyProxy delegates calls to a BalancerMetaPoolStrategy implementation
*/
contract OETHBalancerMetaPoolwstEthStrategyProxy is
InitializeGovernedUpgradeabilityProxy
{
}
/**
* @notice FluxStrategyProxy delegates calls to a CompoundStrategy implementation
*/
contract FluxStrategyProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice MakerDsrStrategyProxy delegates calls to a Generalized4626Strategy implementation
*/
contract MakerDsrStrategyProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice FrxEthRedeemStrategyProxy delegates calls to a FrxEthRedeemStrategy implementation
*/
contract FrxEthRedeemStrategyProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice OETHBuybackProxy delegates calls to Buyback implementation
*/
contract OETHBuybackProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice BridgedWOETHProxy delegates calls to BridgedWOETH implementation
*/
contract BridgedWOETHProxy is InitializeGovernedUpgradeabilityProxy {
}
/**
* @notice NativeStakingSSVStrategyProxy delegates calls to NativeStakingSSVStrategy implementation
*/
contract NativeStakingSSVStrategyProxy is
InitializeGovernedUpgradeabilityProxy
{
}
/**
* @notice NativeStakingFeeAccumulatorProxy delegates calls to NativeStakingFeeCollector implementation
*/
contract NativeStakingFeeAccumulatorProxy is
InitializeGovernedUpgradeabilityProxy
{
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @title Base for contracts that are managed by the Origin Protocol's Governor.
* @dev Copy of the openzeppelin Ownable.sol contract with nomenclature change
* from owner to governor and renounce methods removed. Does not use
* Context.sol like Ownable.sol does for simplification.
* @author Origin Protocol Inc
*/
contract Governable {
// Storage position of the owner and pendingOwner of the contract
// keccak256("OUSD.governor");
bytes32 private constant governorPosition =
0x7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a;
// keccak256("OUSD.pending.governor");
bytes32 private constant pendingGovernorPosition =
0x44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db;
// keccak256("OUSD.reentry.status");
bytes32 private constant reentryStatusPosition =
0x53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac4535;
// See OpenZeppelin ReentrancyGuard implementation
uint256 constant _NOT_ENTERED = 1;
uint256 constant _ENTERED = 2;
event PendingGovernorshipTransfer(
address indexed previousGovernor,
address indexed newGovernor
);
event GovernorshipTransferred(
address indexed previousGovernor,
address indexed newGovernor
);
/**
* @dev Initializes the contract setting the deployer as the initial Governor.
*/
constructor() {
_setGovernor(msg.sender);
emit GovernorshipTransferred(address(0), _governor());
}
/**
* @notice Returns the address of the current Governor.
*/
function governor() public view returns (address) {
return _governor();
}
/**
* @dev Returns the address of the current Governor.
*/
function _governor() internal view returns (address governorOut) {
bytes32 position = governorPosition;
// solhint-disable-next-line no-inline-assembly
assembly {
governorOut := sload(position)
}
}
/**
* @dev Returns the address of the pending Governor.
*/
function _pendingGovernor()
internal
view
returns (address pendingGovernor)
{
bytes32 position = pendingGovernorPosition;
// solhint-disable-next-line no-inline-assembly
assembly {
pendingGovernor := sload(position)
}
}
/**
* @dev Throws if called by any account other than the Governor.
*/
modifier onlyGovernor() {
require(isGovernor(), "Caller is not the Governor");
_;
}
/**
* @notice Returns true if the caller is the current Governor.
*/
function isGovernor() public view returns (bool) {
return msg.sender == _governor();
}
function _setGovernor(address newGovernor) internal {
bytes32 position = governorPosition;
// solhint-disable-next-line no-inline-assembly
assembly {
sstore(position, newGovernor)
}
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and make it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
bytes32 position = reentryStatusPosition;
uint256 _reentry_status;
// solhint-disable-next-line no-inline-assembly
assembly {
_reentry_status := sload(position)
}
// On the first call to nonReentrant, _notEntered will be true
require(_reentry_status != _ENTERED, "Reentrant call");
// Any calls to nonReentrant after this point will fail
// solhint-disable-next-line no-inline-assembly
assembly {
sstore(position, _ENTERED)
}
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
// solhint-disable-next-line no-inline-assembly
assembly {
sstore(position, _NOT_ENTERED)
}
}
function _setPendingGovernor(address newGovernor) internal {
bytes32 position = pendingGovernorPosition;
// solhint-disable-next-line no-inline-assembly
assembly {
sstore(position, newGovernor)
}
}
/**
* @notice Transfers Governance of the contract to a new account (`newGovernor`).
* Can only be called by the current Governor. Must be claimed for this to complete
* @param _newGovernor Address of the new Governor
*/
function transferGovernance(address _newGovernor) external onlyGovernor {
_setPendingGovernor(_newGovernor);
emit PendingGovernorshipTransfer(_governor(), _newGovernor);
}
/**
* @notice Claim Governance of the contract to a new account (`newGovernor`).
* Can only be called by the new Governor.
*/
function claimGovernance() external {
require(
msg.sender == _pendingGovernor(),
"Only the pending Governor can complete the claim"
);
_changeGovernor(msg.sender);
}
/**
* @dev Change Governance of the contract to a new account (`newGovernor`).
* @param _newGovernor Address of the new Governor
*/
function _changeGovernor(address _newGovernor) internal {
require(_newGovernor != address(0), "New Governor is address(0)");
emit GovernorshipTransferred(_governor(), _newGovernor);
_setGovernor(_newGovernor);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import { Address } from "@openzeppelin/contracts/utils/Address.sol";
import { Governable } from "../governance/Governable.sol";
/**
* @title BaseGovernedUpgradeabilityProxy
* @dev This contract combines an upgradeability proxy with our governor system.
* It is based on an older version of OpenZeppelins BaseUpgradeabilityProxy
* with Solidity ^0.8.0.
* @author Origin Protocol Inc
*/
contract InitializeGovernedUpgradeabilityProxy is Governable {
/**
* @dev Emitted when the implementation is upgraded.
* @param implementation Address of the new implementation.
*/
event Upgraded(address indexed implementation);
/**
* @dev Contract initializer with Governor enforcement
* @param _logic Address of the initial implementation.
* @param _initGovernor Address of the initial Governor.
* @param _data Data to send as msg.data to the implementation to initialize
* the proxied contract.
* It should include the signature and the parameters of the function to be
* called, as described in
* https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.
* This parameter is optional, if no data is given the initialization call
* to proxied contract will be skipped.
*/
function initialize(
address _logic,
address _initGovernor,
bytes calldata _data
) public payable onlyGovernor {
require(_implementation() == address(0));
assert(
IMPLEMENTATION_SLOT ==
bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1)
);
_setImplementation(_logic);
if (_data.length > 0) {
(bool success, ) = _logic.delegatecall(_data);
require(success);
}
_changeGovernor(_initGovernor);
}
/**
* @return The address of the proxy admin/it's also the governor.
*/
function admin() external view returns (address) {
return _governor();
}
/**
* @return The address of the implementation.
*/
function implementation() external view returns (address) {
return _implementation();
}
/**
* @dev Upgrade the backing implementation of the proxy.
* Only the admin can call this function.
* @param newImplementation Address of the new implementation.
*/
function upgradeTo(address newImplementation) external onlyGovernor {
_upgradeTo(newImplementation);
}
/**
* @dev Upgrade the backing implementation of the proxy and call a function
* on the new implementation.
* This is useful to initialize the proxied contract.
* @param newImplementation Address of the new implementation.
* @param data Data to send as msg.data in the low level call.
* It should include the signature and the parameters of the function to be called, as described in
* https://solidity.readthedocs.io/en/v0.4.24/abi-spec.html#function-selector-and-argument-encoding.
*/
function upgradeToAndCall(address newImplementation, bytes calldata data)
external
payable
onlyGovernor
{
_upgradeTo(newImplementation);
(bool success, ) = newImplementation.delegatecall(data);
require(success);
}
/**
* @dev Fallback function.
* Implemented entirely in `_fallback`.
*/
fallback() external payable {
_fallback();
}
/**
* @dev Delegates execution to an implementation contract.
* This is a low level function that doesn't return to its internal call site.
* It will return to the external caller whatever the implementation returns.
* @param _impl Address to delegate.
*/
function _delegate(address _impl) internal {
// solhint-disable-next-line no-inline-assembly
assembly {
// Copy msg.data. We take full control of memory in this inline assembly
// block because it will not return to Solidity code. We overwrite the
// Solidity scratch pad at memory position 0.
calldatacopy(0, 0, calldatasize())
// Call the implementation.
// out and outsize are 0 because we don't know the size yet.
let result := delegatecall(gas(), _impl, 0, calldatasize(), 0, 0)
// Copy the returned data.
returndatacopy(0, 0, returndatasize())
switch result
// delegatecall returns 0 on error.
case 0 {
revert(0, returndatasize())
}
default {
return(0, returndatasize())
}
}
}
/**
* @dev Function that is run as the first thing in the fallback function.
* Can be redefined in derived contracts to add functionality.
* Redefinitions must call super._willFallback().
*/
function _willFallback() internal {}
/**
* @dev fallback implementation.
* Extracted to enable manual triggering.
*/
function _fallback() internal {
_willFallback();
_delegate(_implementation());
}
/**
* @dev Storage slot with the address of the current implementation.
* This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
* validated in the constructor.
*/
bytes32 internal constant IMPLEMENTATION_SLOT =
0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
/**
* @dev Returns the current implementation.
* @return impl Address of the current implementation
*/
function _implementation() internal view returns (address impl) {
bytes32 slot = IMPLEMENTATION_SLOT;
// solhint-disable-next-line no-inline-assembly
assembly {
impl := sload(slot)
}
}
/**
* @dev Upgrades the proxy to a new implementation.
* @param newImplementation Address of the new implementation.
*/
function _upgradeTo(address newImplementation) internal {
_setImplementation(newImplementation);
emit Upgraded(newImplementation);
}
/**
* @dev Sets the implementation address of the proxy.
* @param newImplementation Address of the new implementation.
*/
function _setImplementation(address newImplementation) internal {
require(
Address.isContract(newImplementation),
"Cannot set a proxy implementation to a non-contract address"
);
bytes32 slot = IMPLEMENTATION_SLOT;
// solhint-disable-next-line no-inline-assembly
assembly {
sstore(slot, newImplementation)
}
}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"metadata": {
"useLiteralContent": true
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"GovernorshipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"newGovernor","type":"address"}],"name":"PendingGovernorshipTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"_initGovernor","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"initialize","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"isGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newGovernor","type":"address"}],"name":"transferGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b506100273360008051602061099083398151915255565b600080516020610990833981519152546040516001600160a01b03909116906000907fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a908290a36109138061007d6000396000f3fe6080604052600436106100865760003560e01c80635d36b190116100595780635d36b1901461010a578063c7af33521461011f578063cf7a1d7714610144578063d38bfff414610157578063f851a4401461009057610086565b80630c340a24146100905780633659cfe6146100c25780634f1ef286146100e25780635c60da1b146100f5575b61008e610177565b005b34801561009c57600080fd5b506100a5610197565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ce57600080fd5b5061008e6100dd366004610745565b6101b4565b61008e6100f03660046107c8565b6101ed565b34801561010157600080fd5b506100a561028a565b34801561011657600080fd5b5061008e6102a2565b34801561012b57600080fd5b50610134610346565b60405190151581526020016100b9565b61008e610152366004610767565b610377565b34801561016357600080fd5b5061008e610172366004610745565b610491565b61019561019060008051602061089e8339815191525490565b610535565b565b60006101af6000805160206108be8339815191525490565b905090565b6101bc610346565b6101e15760405162461bcd60e51b81526004016101d89061082b565b60405180910390fd5b6101ea81610559565b50565b6101f5610346565b6102115760405162461bcd60e51b81526004016101d89061082b565b61021a83610559565b6000836001600160a01b0316838360405161023692919061081b565b600060405180830381855af49150503d8060008114610271576040519150601f19603f3d011682016040523d82523d6000602084013e610276565b606091505b505090508061028457600080fd5b50505050565b60006101af60008051602061089e8339815191525490565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b03161461033d5760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b60648201526084016101d8565b61019533610599565b600061035e6000805160206108be8339815191525490565b6001600160a01b0316336001600160a01b031614905090565b61037f610346565b61039b5760405162461bcd60e51b81526004016101d89061082b565b60006103b360008051602061089e8339815191525490565b6001600160a01b0316146103c657600080fd5b6103f160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd610862565b60008051602061089e8339815191521461040d5761040d610887565b6104168461065a565b8015610488576000846001600160a01b0316838360405161043892919061081b565b600060405180830381855af49150503d8060008114610473576040519150601f19603f3d011682016040523d82523d6000602084013e610478565b606091505b505090508061048657600080fd5b505b61028483610599565b610499610346565b6104b55760405162461bcd60e51b81526004016101d89061082b565b6104dd817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b03166104fd6000805160206108be8339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b3660008037600080366000845af43d6000803e808015610554573d6000f35b3d6000fd5b6105628161065a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105ef5760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f72206973206164647265737328302900000000000060448201526064016101d8565b806001600160a01b031661060f6000805160206108be8339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a36101ea816000805160206108be83398151915255565b803b6106ce5760405162461bcd60e51b815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084016101d8565b60008051602061089e83398151915255565b80356001600160a01b03811681146106f757600080fd5b919050565b60008083601f84011261070e57600080fd5b50813567ffffffffffffffff81111561072657600080fd5b60208301915083602082850101111561073e57600080fd5b9250929050565b60006020828403121561075757600080fd5b610760826106e0565b9392505050565b6000806000806060858703121561077d57600080fd5b610786856106e0565b9350610794602086016106e0565b9250604085013567ffffffffffffffff8111156107b057600080fd5b6107bc878288016106fc565b95989497509550505050565b6000806000604084860312156107dd57600080fd5b6107e6846106e0565b9250602084013567ffffffffffffffff81111561080257600080fd5b61080e868287016106fc565b9497909650939450505050565b8183823760009101908152919050565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b60008282101561088257634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa26469706673582212203019a79a43f7d4ec89620197adcc99852be5f4965adfb8a6bbb0ad3954812e2c64736f6c634300080700337bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a
Deployed Bytecode
0x6080604052600436106100865760003560e01c80635d36b190116100595780635d36b1901461010a578063c7af33521461011f578063cf7a1d7714610144578063d38bfff414610157578063f851a4401461009057610086565b80630c340a24146100905780633659cfe6146100c25780634f1ef286146100e25780635c60da1b146100f5575b61008e610177565b005b34801561009c57600080fd5b506100a5610197565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ce57600080fd5b5061008e6100dd366004610745565b6101b4565b61008e6100f03660046107c8565b6101ed565b34801561010157600080fd5b506100a561028a565b34801561011657600080fd5b5061008e6102a2565b34801561012b57600080fd5b50610134610346565b60405190151581526020016100b9565b61008e610152366004610767565b610377565b34801561016357600080fd5b5061008e610172366004610745565b610491565b61019561019060008051602061089e8339815191525490565b610535565b565b60006101af6000805160206108be8339815191525490565b905090565b6101bc610346565b6101e15760405162461bcd60e51b81526004016101d89061082b565b60405180910390fd5b6101ea81610559565b50565b6101f5610346565b6102115760405162461bcd60e51b81526004016101d89061082b565b61021a83610559565b6000836001600160a01b0316838360405161023692919061081b565b600060405180830381855af49150503d8060008114610271576040519150601f19603f3d011682016040523d82523d6000602084013e610276565b606091505b505090508061028457600080fd5b50505050565b60006101af60008051602061089e8339815191525490565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b03161461033d5760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b60648201526084016101d8565b61019533610599565b600061035e6000805160206108be8339815191525490565b6001600160a01b0316336001600160a01b031614905090565b61037f610346565b61039b5760405162461bcd60e51b81526004016101d89061082b565b60006103b360008051602061089e8339815191525490565b6001600160a01b0316146103c657600080fd5b6103f160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd610862565b60008051602061089e8339815191521461040d5761040d610887565b6104168461065a565b8015610488576000846001600160a01b0316838360405161043892919061081b565b600060405180830381855af49150503d8060008114610473576040519150601f19603f3d011682016040523d82523d6000602084013e610478565b606091505b505090508061048657600080fd5b505b61028483610599565b610499610346565b6104b55760405162461bcd60e51b81526004016101d89061082b565b6104dd817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b03166104fd6000805160206108be8339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b3660008037600080366000845af43d6000803e808015610554573d6000f35b3d6000fd5b6105628161065a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b0381166105ef5760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f72206973206164647265737328302900000000000060448201526064016101d8565b806001600160a01b031661060f6000805160206108be8339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a36101ea816000805160206108be83398151915255565b803b6106ce5760405162461bcd60e51b815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084016101d8565b60008051602061089e83398151915255565b80356001600160a01b03811681146106f757600080fd5b919050565b60008083601f84011261070e57600080fd5b50813567ffffffffffffffff81111561072657600080fd5b60208301915083602082850101111561073e57600080fd5b9250929050565b60006020828403121561075757600080fd5b610760826106e0565b9392505050565b6000806000806060858703121561077d57600080fd5b610786856106e0565b9350610794602086016106e0565b9250604085013567ffffffffffffffff8111156107b057600080fd5b6107bc878288016106fc565b95989497509550505050565b6000806000604084860312156107dd57600080fd5b6107e6846106e0565b9250602084013567ffffffffffffffff81111561080257600080fd5b61080e868287016106fc565b9497909650939450505050565b8183823760009101908152919050565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b60008282101561088257634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa26469706673582212203019a79a43f7d4ec89620197adcc99852be5f4965adfb8a6bbb0ad3954812e2c64736f6c63430008070033
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $3.56 | 0.0284 | $0.1011 |
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.