Origin: Second Native Staking Fee Accumulator
Source Code (Proxy)
Latest 25 from a total of 1,530 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 24372134 | 12 hrs ago | IN | 0.01131383 ETH | 0.0000038 | ||||
| Transfer | 24366306 | 31 hrs ago | IN | 0.07493099 ETH | 0.0000026 | ||||
| Transfer | 24366073 | 32 hrs ago | IN | 0.01596602 ETH | 0.00000261 | ||||
| Transfer | 24365622 | 34 hrs ago | IN | 0.0155971 ETH | 0.0000038 | ||||
| Transfer | 24362352 | 45 hrs ago | IN | 0.01188364 ETH | 0.0000036 | ||||
| Transfer | 24361362 | 2 days ago | IN | 0.00811919 ETH | 0.00000645 | ||||
| Transfer | 24358131 | 2 days ago | IN | 0.03845093 ETH | 0.00000575 | ||||
| Transfer | 24356661 | 2 days ago | IN | 0.0440986 ETH | 0.00011211 | ||||
| Transfer | 24354724 | 2 days ago | IN | 0.01257216 ETH | 0.00000163 | ||||
| Transfer | 24353601 | 3 days ago | IN | 0.01578878 ETH | 0.00000185 | ||||
| Transfer | 24351430 | 3 days ago | IN | 0.00716554 ETH | 0.00000181 | ||||
| Transfer | 24350219 | 3 days ago | IN | 0.01711632 ETH | 0.00002379 | ||||
| Transfer | 24347192 | 3 days ago | IN | 0.00621222 ETH | 0.00000345 | ||||
| Transfer | 24344209 | 4 days ago | IN | 0.04231584 ETH | 0.0000013 | ||||
| Transfer | 24342558 | 4 days ago | IN | 0.02342603 ETH | 0.0000089 | ||||
| Transfer | 24339381 | 5 days ago | IN | 0.00930072 ETH | 0.00000167 | ||||
| Transfer | 24338110 | 5 days ago | IN | 0.00727663 ETH | 0.00000192 | ||||
| Transfer | 24336911 | 5 days ago | IN | 0.00915516 ETH | 0.00000173 | ||||
| Transfer | 24330234 | 6 days ago | IN | 0.00570923 ETH | 0.00000104 | ||||
| Transfer | 24323406 | 7 days ago | IN | 0.00766524 ETH | 0.0000023 | ||||
| Transfer | 24321677 | 7 days ago | IN | 0.01780142 ETH | 0.00000142 | ||||
| Transfer | 24311626 | 8 days ago | IN | 0.00853705 ETH | 0.00000079 | ||||
| Transfer | 24306907 | 9 days ago | IN | 0.01026616 ETH | 0.00000533 | ||||
| Transfer | 24306686 | 9 days ago | IN | 0.01010523 ETH | 0.00000299 | ||||
| Transfer | 24302057 | 10 days ago | IN | 0.00675893 ETH | 0.00000093 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 24368936 | 22 hrs ago | 0.39908891 ETH | ||||
| Transfer | 24311588 | 8 days ago | 0.02037139 ETH | ||||
| Transfer | 24304419 | 9 days ago | 0.29679609 ETH | ||||
| Transfer | 24254226 | 16 days ago | 0.34258952 ETH | ||||
| Transfer | 24239794 | 18 days ago | 0.33927384 ETH | ||||
| Transfer | 24185792 | 26 days ago | 0.30257357 ETH | ||||
| Transfer | 24130605 | 34 days ago | 0.06101422 ETH | ||||
| Transfer | 24121641 | 35 days ago | 0.21854054 ETH | ||||
| Transfer | 24064334 | 43 days ago | 0.01913825 ETH | ||||
| Transfer | 24057156 | 44 days ago | 0.29335602 ETH | ||||
| Transfer | 24007022 | 51 days ago | 0.012627 ETH | ||||
| Transfer | 23999874 | 52 days ago | 0.15864907 ETH | ||||
| Transfer | 23942973 | 60 days ago | 0.02723613 ETH | ||||
| Transfer | 23936211 | 61 days ago | 0.11253104 ETH | ||||
| Transfer | 23879125 | 69 days ago | 0.00628747 ETH | ||||
| Transfer | 23872025 | 70 days ago | 0.33806228 ETH | ||||
| Transfer | 23815082 | 78 days ago | 0.0236199 ETH | ||||
| Transfer | 23807926 | 79 days ago | 0.53970292 ETH | ||||
| Transfer | 23757884 | 86 days ago | 0.01294679 ETH | ||||
| Transfer | 23750731 | 87 days ago | 0.24607036 ETH | ||||
| Transfer | 23736431 | 89 days ago | 0.59529324 ETH | ||||
| Transfer | 23694731 | 95 days ago | 0.00001125 ETH | ||||
| Transfer | 23686390 | 96 days ago | 0.03114206 ETH | ||||
| Transfer | 23679243 | 97 days ago | 0.65130466 ETH | ||||
| Transfer | 23629264 | 104 days ago | 0.1269316 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Produced Blocks
Latest 25 blocks (From a total of 79 blocks with 0.39 Ether produced)
| Block | Transaction | Difficulty | Gas Used | Reward | |
|---|---|---|---|---|---|
| 23975245 | 55 days ago | 73 | 0.00 TH | 4,065,327 (6.79%) | 0.003225737688468715 ETH |
| 23974503 | 56 days ago | 67 | 0.00 TH | 3,780,509 (6.30%) | 0.001570285767183404 ETH |
| 23972676 | 56 days ago | 47 | 0.00 TH | 4,024,975 (6.71%) | 0.002747867628162628 ETH |
| 23971183 | 56 days ago | 39 | 0.00 TH | 1,476,535 (2.46%) | 0.001508889798461539 ETH |
| 23970439 | 56 days ago | 86 | 0.00 TH | 3,904,079 (6.51%) | 0.002921875086836694 ETH |
| 23970248 | 56 days ago | 84 | 0.00 TH | 3,457,019 (5.76%) | 0.002133194173577399 ETH |
| 23969203 | 56 days ago | 62 | 0.00 TH | 3,296,991 (5.49%) | 0.002456896786689954 ETH |
| 23968040 | 56 days ago | 151 | 0.00 TH | 8,125,696 (13.54%) | 0.003031180288922795 ETH |
| 23967540 | 57 days ago | 96 | 0.00 TH | 51,135,399 (85.23%) | 0.004173165768435861 ETH |
| 23964964 | 57 days ago | 74 | 0.00 TH | 6,845,617 (11.41%) | 0.003883035631153568 ETH |
| 23964932 | 57 days ago | 110 | 0.00 TH | 8,549,370 (14.25%) | 0.002872189549024739 ETH |
| 23964510 | 57 days ago | 123 | 0.00 TH | 7,476,159 (12.46%) | 0.003528955545476305 ETH |
| 23961252 | 57 days ago | 38 | 0.00 TH | 2,969,243 (4.95%) | 0.000983075409088836 ETH |
| 23959156 | 58 days ago | 75 | 0.00 TH | 31,038,952 (51.73%) | 0.001641968508274762 ETH |
| 23958800 | 58 days ago | 67 | 0.00 TH | 59,110,206 (98.52%) | 0.003253278312190146 ETH |
| 23955194 | 58 days ago | 53 | 0.00 TH | 2,996,693 (4.99%) | 0.000859933000047547 ETH |
| 23951727 | 59 days ago | 37 | 0.00 TH | 3,168,639 (5.28%) | 0.001659355506419508 ETH |
| 23950842 | 59 days ago | 74 | 0.00 TH | 3,970,825 (6.62%) | 0.001798127430487237 ETH |
| 23950543 | 59 days ago | 279 | 0.00 TH | 59,997,257 (100.00%) | 0.002757349242689007 ETH |
| 23948848 | 59 days ago | 117 | 0.00 TH | 9,198,714 (15.33%) | 0.004105693763068894 ETH |
| 23947653 | 59 days ago | 105 | 0.00 TH | 6,250,330 (10.42%) | 0.003781813154589429 ETH |
| 23939409 | 60 days ago | 206 | 0.00 TH | 8,170,518 (13.62%) | 0.003932756172969 ETH |
| 23939135 | 61 days ago | 53 | 0.00 TH | 4,225,457 (7.04%) | 0.002550776641231632 ETH |
| 23937985 | 61 days ago | 132 | 0.00 TH | 8,370,027 (13.95%) | 0.002301441788229368 ETH |
| 23925809 | 62 days ago | 131 | 0.00 TH | 7,243,482 (12.07%) | 0.003901135673702026 ETH |
Loading...
Loading
Contract Name:
NativeStakingFeeAccumulator2Proxy
Compiler Version
v0.8.7+commit.e28d00a7
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 FeeAccumulator implementation
*/
contract NativeStakingFeeAccumulatorProxy is
InitializeGovernedUpgradeabilityProxy
{
}
/**
* @notice NativeStakingSSVStrategy2Proxy delegates calls to NativeStakingSSVStrategy implementation
*/
contract NativeStakingSSVStrategy2Proxy is
InitializeGovernedUpgradeabilityProxy
{
}
/**
* @notice NativeStakingFeeAccumulator2Proxy delegates calls to FeeAccumulator implementation
*/
contract NativeStakingFeeAccumulator2Proxy is
InitializeGovernedUpgradeabilityProxy
{
}
/**
* @notice LidoWithdrawalStrategyProxy delegates calls to a LidoWithdrawalStrategy implementation
*/
contract LidoWithdrawalStrategyProxy 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));
require(_logic != address(0), "Implementation not set");
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)
}
}
}{
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs",
"useLiteralContent": true
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": [],
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}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
608060405234801561001057600080fd5b50610027336000805160206109df83398151915255565b6000805160206109df833981519152546040516001600160a01b03909116906000907fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a908290a36109628061007d6000396000f3fe6080604052600436106100865760003560e01c80635d36b190116100595780635d36b1901461010a578063c7af33521461011f578063cf7a1d7714610144578063d38bfff414610157578063f851a4401461009057610086565b80630c340a24146100905780633659cfe6146100c25780634f1ef286146100e25780635c60da1b146100f5575b61008e610177565b005b34801561009c57600080fd5b506100a5610197565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ce57600080fd5b5061008e6100dd366004610794565b6101b4565b61008e6100f0366004610817565b6101ed565b34801561010157600080fd5b506100a561028a565b34801561011657600080fd5b5061008e6102a2565b34801561012b57600080fd5b50610134610346565b60405190151581526020016100b9565b61008e6101523660046107b6565b610377565b34801561016357600080fd5b5061008e610172366004610794565b6104e0565b6101956101906000805160206108ed8339815191525490565b610584565b565b60006101af60008051602061090d8339815191525490565b905090565b6101bc610346565b6101e15760405162461bcd60e51b81526004016101d89061087a565b60405180910390fd5b6101ea816105a8565b50565b6101f5610346565b6102115760405162461bcd60e51b81526004016101d89061087a565b61021a836105a8565b6000836001600160a01b0316838360405161023692919061086a565b600060405180830381855af49150503d8060008114610271576040519150601f19603f3d011682016040523d82523d6000602084013e610276565b606091505b505090508061028457600080fd5b50505050565b60006101af6000805160206108ed8339815191525490565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b03161461033d5760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b60648201526084016101d8565b610195336105e8565b600061035e60008051602061090d8339815191525490565b6001600160a01b0316336001600160a01b031614905090565b61037f610346565b61039b5760405162461bcd60e51b81526004016101d89061087a565b60006103b36000805160206108ed8339815191525490565b6001600160a01b0316146103c657600080fd5b6001600160a01b0384166104155760405162461bcd60e51b8152602060048201526016602482015275125b5c1b195b595b9d185d1a5bdb881b9bdd081cd95d60521b60448201526064016101d8565b61044060017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd6108b1565b6000805160206108ed8339815191521461045c5761045c6108d6565b610465846106a9565b80156104d7576000846001600160a01b0316838360405161048792919061086a565b600060405180830381855af49150503d80600081146104c2576040519150601f19603f3d011682016040523d82523d6000602084013e6104c7565b606091505b50509050806104d557600080fd5b505b610284836105e8565b6104e8610346565b6105045760405162461bcd60e51b81526004016101d89061087a565b61052c817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b031661054c60008051602061090d8339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b3660008037600080366000845af43d6000803e8080156105a3573d6000f35b3d6000fd5b6105b1816106a9565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661063e5760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f72206973206164647265737328302900000000000060448201526064016101d8565b806001600160a01b031661065e60008051602061090d8339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a36101ea8160008051602061090d83398151915255565b803b61071d5760405162461bcd60e51b815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084016101d8565b6000805160206108ed83398151915255565b80356001600160a01b038116811461074657600080fd5b919050565b60008083601f84011261075d57600080fd5b50813567ffffffffffffffff81111561077557600080fd5b60208301915083602082850101111561078d57600080fd5b9250929050565b6000602082840312156107a657600080fd5b6107af8261072f565b9392505050565b600080600080606085870312156107cc57600080fd5b6107d58561072f565b93506107e36020860161072f565b9250604085013567ffffffffffffffff8111156107ff57600080fd5b61080b8782880161074b565b95989497509550505050565b60008060006040848603121561082c57600080fd5b6108358461072f565b9250602084013567ffffffffffffffff81111561085157600080fd5b61085d8682870161074b565b9497909650939450505050565b8183823760009101908152919050565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b6000828210156108d157634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa2646970667358221220640772569fcd8ef3d53e9255696bfeed0763f49c69c65ccd40242a7a013b070564736f6c634300080700337bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a
Deployed Bytecode
0x6080604052600436106100865760003560e01c80635d36b190116100595780635d36b1901461010a578063c7af33521461011f578063cf7a1d7714610144578063d38bfff414610157578063f851a4401461009057610086565b80630c340a24146100905780633659cfe6146100c25780634f1ef286146100e25780635c60da1b146100f5575b61008e610177565b005b34801561009c57600080fd5b506100a5610197565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100ce57600080fd5b5061008e6100dd366004610794565b6101b4565b61008e6100f0366004610817565b6101ed565b34801561010157600080fd5b506100a561028a565b34801561011657600080fd5b5061008e6102a2565b34801561012b57600080fd5b50610134610346565b60405190151581526020016100b9565b61008e6101523660046107b6565b610377565b34801561016357600080fd5b5061008e610172366004610794565b6104e0565b6101956101906000805160206108ed8339815191525490565b610584565b565b60006101af60008051602061090d8339815191525490565b905090565b6101bc610346565b6101e15760405162461bcd60e51b81526004016101d89061087a565b60405180910390fd5b6101ea816105a8565b50565b6101f5610346565b6102115760405162461bcd60e51b81526004016101d89061087a565b61021a836105a8565b6000836001600160a01b0316838360405161023692919061086a565b600060405180830381855af49150503d8060008114610271576040519150601f19603f3d011682016040523d82523d6000602084013e610276565b606091505b505090508061028457600080fd5b50505050565b60006101af6000805160206108ed8339815191525490565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b03161461033d5760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b60648201526084016101d8565b610195336105e8565b600061035e60008051602061090d8339815191525490565b6001600160a01b0316336001600160a01b031614905090565b61037f610346565b61039b5760405162461bcd60e51b81526004016101d89061087a565b60006103b36000805160206108ed8339815191525490565b6001600160a01b0316146103c657600080fd5b6001600160a01b0384166104155760405162461bcd60e51b8152602060048201526016602482015275125b5c1b195b595b9d185d1a5bdb881b9bdd081cd95d60521b60448201526064016101d8565b61044060017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd6108b1565b6000805160206108ed8339815191521461045c5761045c6108d6565b610465846106a9565b80156104d7576000846001600160a01b0316838360405161048792919061086a565b600060405180830381855af49150503d80600081146104c2576040519150601f19603f3d011682016040523d82523d6000602084013e6104c7565b606091505b50509050806104d557600080fd5b505b610284836105e8565b6104e8610346565b6105045760405162461bcd60e51b81526004016101d89061087a565b61052c817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b031661054c60008051602061090d8339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b3660008037600080366000845af43d6000803e8080156105a3573d6000f35b3d6000fd5b6105b1816106a9565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661063e5760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f72206973206164647265737328302900000000000060448201526064016101d8565b806001600160a01b031661065e60008051602061090d8339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a36101ea8160008051602061090d83398151915255565b803b61071d5760405162461bcd60e51b815260206004820152603b60248201527f43616e6e6f742073657420612070726f787920696d706c656d656e746174696f60448201527f6e20746f2061206e6f6e2d636f6e74726163742061646472657373000000000060648201526084016101d8565b6000805160206108ed83398151915255565b80356001600160a01b038116811461074657600080fd5b919050565b60008083601f84011261075d57600080fd5b50813567ffffffffffffffff81111561077557600080fd5b60208301915083602082850101111561078d57600080fd5b9250929050565b6000602082840312156107a657600080fd5b6107af8261072f565b9392505050565b600080600080606085870312156107cc57600080fd5b6107d58561072f565b93506107e36020860161072f565b9250604085013567ffffffffffffffff8111156107ff57600080fd5b61080b8782880161074b565b95989497509550505050565b60008060006040848603121561082c57600080fd5b6108358461072f565b9250602084013567ffffffffffffffff81111561085157600080fd5b61085d8682870161074b565b9497909650939450505050565b8183823760009101908152919050565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b6000828210156108d157634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa2646970667358221220640772569fcd8ef3d53e9255696bfeed0763f49c69c65ccd40242a7a013b070564736f6c63430008070033
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
[ Download: CSV Export ]
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.