Overview
ETH Balance
0 ETH
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
Sponsored
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60a06040 | 198135 | 219 days ago | IN | 0 ETH | 0.0026438 |
Loading...
Loading
Contract Name:
BlastGovernor
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
Yes with 1000000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.20; import { Ownable } from "@solady/src/auth/Ownable.sol"; import { IBlastGovernor } from "./interfaces/IBlastGovernor.sol"; import { IBlast } from "./interfaces/IBlast.sol"; /** * @title BlastGovernor * @notice This contract allows the owner to configure and claim Blast yield and gas refunds. */ contract BlastGovernor is IBlastGovernor, Ownable { IBlast public immutable BLAST = IBlast(0x4300000000000000000000000000000000000002); constructor() { BLAST.configureClaimableGas(); _initializeOwner({ newOwner: msg.sender }); } /** * @inheritdoc IBlastGovernor */ function claimAllYield(address target, address receiver) external onlyOwner { if (receiver == address(0)) revert ZeroAddress(); uint256 yieldClaimed = BLAST.claimAllYield({ contractAddress: target, recipientOfYield: receiver }); emit GasClaimed({ addr: target, receiver: receiver, amount: yieldClaimed }); } /** * @inheritdoc IBlastGovernor */ function claimAllGas(address target, address receiver) external onlyOwner { if (receiver == address(0)) revert ZeroAddress(); uint256 gasClaimed = BLAST.claimAllGas({ contractAddress: target, recipientOfGas: receiver }); emit GasClaimed({ addr: target, receiver: receiver, amount: gasClaimed }); } /** * @inheritdoc IBlastGovernor */ function configureContract( address target, IBlast.YieldMode yieldMode, IBlast.GasMode gasMode, address newGovernor ) external onlyOwner { if (target == address(0) || newGovernor == address(0)) revert ZeroAddress(); BLAST.configureContract({ contractAddress: target, _yield: yieldMode, gasMode: gasMode, governor: newGovernor }); } /** * @inheritdoc IBlastGovernor */ function configureGovernorOnBehalf(address target, address newGovernor) external onlyOwner { if (target == address(0) || newGovernor == address(0)) revert ZeroAddress(); BLAST.configureGovernorOnBehalf({ _newGovernor: newGovernor, contractAddress: target }); } /** * @inheritdoc IBlastGovernor */ function readClaimableYield(address target) external view returns (uint256) { return BLAST.readClaimableYield({ contractAddress: target }); } /** * @inheritdoc IBlastGovernor */ function readYieldConfiguration(address target) external view returns (uint8) { return BLAST.readYieldConfiguration({ contractAddress: target }); } /** * @inheritdoc IBlastGovernor */ function readGasParams(address target) external view returns (uint256, uint256, uint256, IBlast.GasMode) { return BLAST.readGasParams({ contractAddress: target }); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /// @notice Simple single owner authorization mixin. /// @author Solady (https://github.com/vectorized/solady/blob/main/src/auth/Ownable.sol) /// /// @dev Note: /// This implementation does NOT auto-initialize the owner to `msg.sender`. /// You MUST call the `_initializeOwner` in the constructor / initializer. /// /// While the ownable portion follows /// [EIP-173](https://eips.ethereum.org/EIPS/eip-173) for compatibility, /// the nomenclature for the 2-step ownership handover may be unique to this codebase. abstract contract Ownable { /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* CUSTOM ERRORS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev The caller is not authorized to call the function. error Unauthorized(); /// @dev The `newOwner` cannot be the zero address. error NewOwnerIsZeroAddress(); /// @dev The `pendingOwner` does not have a valid handover request. error NoHandoverRequest(); /// @dev Cannot double-initialize. error AlreadyInitialized(); /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* EVENTS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev The ownership is transferred from `oldOwner` to `newOwner`. /// This event is intentionally kept the same as OpenZeppelin's Ownable to be /// compatible with indexers and [EIP-173](https://eips.ethereum.org/EIPS/eip-173), /// despite it not being as lightweight as a single argument event. event OwnershipTransferred(address indexed oldOwner, address indexed newOwner); /// @dev An ownership handover to `pendingOwner` has been requested. event OwnershipHandoverRequested(address indexed pendingOwner); /// @dev The ownership handover to `pendingOwner` has been canceled. event OwnershipHandoverCanceled(address indexed pendingOwner); /// @dev `keccak256(bytes("OwnershipTransferred(address,address)"))`. uint256 private constant _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE = 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0; /// @dev `keccak256(bytes("OwnershipHandoverRequested(address)"))`. uint256 private constant _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE = 0xdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d; /// @dev `keccak256(bytes("OwnershipHandoverCanceled(address)"))`. uint256 private constant _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE = 0xfa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92; /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* STORAGE */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev The owner slot is given by: /// `bytes32(~uint256(uint32(bytes4(keccak256("_OWNER_SLOT_NOT")))))`. /// It is intentionally chosen to be a high value /// to avoid collision with lower slots. /// The choice of manual storage layout is to enable compatibility /// with both regular and upgradeable contracts. bytes32 internal constant _OWNER_SLOT = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927; /// The ownership handover slot of `newOwner` is given by: /// ``` /// mstore(0x00, or(shl(96, user), _HANDOVER_SLOT_SEED)) /// let handoverSlot := keccak256(0x00, 0x20) /// ``` /// It stores the expiry timestamp of the two-step ownership handover. uint256 private constant _HANDOVER_SLOT_SEED = 0x389a75e1; /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* INTERNAL FUNCTIONS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Override to return true to make `_initializeOwner` prevent double-initialization. function _guardInitializeOwner() internal pure virtual returns (bool guard) {} /// @dev Initializes the owner directly without authorization guard. /// This function must be called upon initialization, /// regardless of whether the contract is upgradeable or not. /// This is to enable generalization to both regular and upgradeable contracts, /// and to save gas in case the initial owner is not the caller. /// For performance reasons, this function will not check if there /// is an existing owner. function _initializeOwner(address newOwner) internal virtual { if (_guardInitializeOwner()) { /// @solidity memory-safe-assembly assembly { let ownerSlot := _OWNER_SLOT if sload(ownerSlot) { mstore(0x00, 0x0dc149f0) // `AlreadyInitialized()`. revert(0x1c, 0x04) } // Clean the upper 96 bits. newOwner := shr(96, shl(96, newOwner)) // Store the new value. sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner)))) // Emit the {OwnershipTransferred} event. log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner) } } else { /// @solidity memory-safe-assembly assembly { // Clean the upper 96 bits. newOwner := shr(96, shl(96, newOwner)) // Store the new value. sstore(_OWNER_SLOT, newOwner) // Emit the {OwnershipTransferred} event. log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, 0, newOwner) } } } /// @dev Sets the owner directly without authorization guard. function _setOwner(address newOwner) internal virtual { if (_guardInitializeOwner()) { /// @solidity memory-safe-assembly assembly { let ownerSlot := _OWNER_SLOT // Clean the upper 96 bits. newOwner := shr(96, shl(96, newOwner)) // Emit the {OwnershipTransferred} event. log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner) // Store the new value. sstore(ownerSlot, or(newOwner, shl(255, iszero(newOwner)))) } } else { /// @solidity memory-safe-assembly assembly { let ownerSlot := _OWNER_SLOT // Clean the upper 96 bits. newOwner := shr(96, shl(96, newOwner)) // Emit the {OwnershipTransferred} event. log3(0, 0, _OWNERSHIP_TRANSFERRED_EVENT_SIGNATURE, sload(ownerSlot), newOwner) // Store the new value. sstore(ownerSlot, newOwner) } } } /// @dev Throws if the sender is not the owner. function _checkOwner() internal view virtual { /// @solidity memory-safe-assembly assembly { // If the caller is not the stored owner, revert. if iszero(eq(caller(), sload(_OWNER_SLOT))) { mstore(0x00, 0x82b42900) // `Unauthorized()`. revert(0x1c, 0x04) } } } /// @dev Returns how long a two-step ownership handover is valid for in seconds. /// Override to return a different value if needed. /// Made internal to conserve bytecode. Wrap it in a public function if needed. function _ownershipHandoverValidFor() internal view virtual returns (uint64) { return 48 * 3600; } /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* PUBLIC UPDATE FUNCTIONS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Allows the owner to transfer the ownership to `newOwner`. function transferOwnership(address newOwner) public payable virtual onlyOwner { /// @solidity memory-safe-assembly assembly { if iszero(shl(96, newOwner)) { mstore(0x00, 0x7448fbae) // `NewOwnerIsZeroAddress()`. revert(0x1c, 0x04) } } _setOwner(newOwner); } /// @dev Allows the owner to renounce their ownership. function renounceOwnership() public payable virtual onlyOwner { _setOwner(address(0)); } /// @dev Request a two-step ownership handover to the caller. /// The request will automatically expire in 48 hours (172800 seconds) by default. function requestOwnershipHandover() public payable virtual { unchecked { uint256 expires = block.timestamp + _ownershipHandoverValidFor(); /// @solidity memory-safe-assembly assembly { // Compute and set the handover slot to `expires`. mstore(0x0c, _HANDOVER_SLOT_SEED) mstore(0x00, caller()) sstore(keccak256(0x0c, 0x20), expires) // Emit the {OwnershipHandoverRequested} event. log2(0, 0, _OWNERSHIP_HANDOVER_REQUESTED_EVENT_SIGNATURE, caller()) } } } /// @dev Cancels the two-step ownership handover to the caller, if any. function cancelOwnershipHandover() public payable virtual { /// @solidity memory-safe-assembly assembly { // Compute and set the handover slot to 0. mstore(0x0c, _HANDOVER_SLOT_SEED) mstore(0x00, caller()) sstore(keccak256(0x0c, 0x20), 0) // Emit the {OwnershipHandoverCanceled} event. log2(0, 0, _OWNERSHIP_HANDOVER_CANCELED_EVENT_SIGNATURE, caller()) } } /// @dev Allows the owner to complete the two-step ownership handover to `pendingOwner`. /// Reverts if there is no existing ownership handover requested by `pendingOwner`. function completeOwnershipHandover(address pendingOwner) public payable virtual onlyOwner { /// @solidity memory-safe-assembly assembly { // Compute and set the handover slot to 0. mstore(0x0c, _HANDOVER_SLOT_SEED) mstore(0x00, pendingOwner) let handoverSlot := keccak256(0x0c, 0x20) // If the handover does not exist, or has expired. if gt(timestamp(), sload(handoverSlot)) { mstore(0x00, 0x6f5e8818) // `NoHandoverRequest()`. revert(0x1c, 0x04) } // Set the handover slot to 0. sstore(handoverSlot, 0) } _setOwner(pendingOwner); } /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* PUBLIC READ FUNCTIONS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Returns the owner of the contract. function owner() public view virtual returns (address result) { /// @solidity memory-safe-assembly assembly { result := sload(_OWNER_SLOT) } } /// @dev Returns the expiry timestamp for the two-step ownership handover to `pendingOwner`. function ownershipHandoverExpiresAt(address pendingOwner) public view virtual returns (uint256 result) { /// @solidity memory-safe-assembly assembly { // Compute the handover slot. mstore(0x0c, _HANDOVER_SLOT_SEED) mstore(0x00, pendingOwner) // Load the handover slot. result := sload(keccak256(0x0c, 0x20)) } } /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* MODIFIERS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /// @dev Marks a function as only callable by the owner. modifier onlyOwner() virtual { _checkOwner(); _; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.20; import { IBlast } from "./IBlast.sol"; /** * @title IBlastGovernor * @notice Interface for BlastGovernor. */ interface IBlastGovernor { /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* ERRORS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /** * Thrown when the zero address is provided. */ error ZeroAddress(); /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* EVENTS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /** * Emitted when gas is claimed for `addr`. * @param addr Target that gas was claimed for. * @param receiver Receiver of the gas refund. * @param amount Native token amount that was claimed. */ event GasClaimed(address indexed addr, address indexed receiver, uint256 amount); /** * Emitted when yield is claimed for `addr`. * @param addr Target that yield was claimed for. * @param receiver Receiver of the yield. * @param amount Native token amount that was claimed. */ event YieldClaimed(address indexed addr, address indexed receiver, uint256 amount); /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/ /* FUNCTIONS */ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/ /** * Function used to claim all available yield for `target`. * @param target Address to claim yield for. * @param receiver Receiving address of the claimed yield. */ function claimAllYield(address target, address receiver) external; /** * Function used to claim a gas refund for `target`. * @param target Address to claim gas refund for. * @param receiver Receiving address of the claimed refund. */ function claimAllGas(address target, address receiver) external; /** * Function used to configure a contract. * @param target Address to configure. * @param yieldMode {IBlast.YieldMode} enum value. * @param yieldMode {IBlast.GasMode} enum value. * @param newGovernor Address of the new contract governor. */ function configureContract( address target, IBlast.YieldMode yieldMode, IBlast.GasMode gasMode, address newGovernor ) external; /** * Function used to set a new governor for a specified `target`. * @param target Address to set a new governor for. * @param newGovernor Address of the new contract governor. */ function configureGovernorOnBehalf(address target, address newGovernor) external; /** * Function used to view the claimable yield for `target`. * @param target Address to view claimable yield for. */ function readClaimableYield(address target) external view returns (uint256); /** * Function used to view the yield configuration for `target`. * @param target Address to view yield configuration for. */ function readYieldConfiguration(address target) external view returns (uint8); /** * Function used to view the gas params for `target`. * @param target Address to view gas params for. */ function readGasParams(address target) external view returns (uint256, uint256, uint256, IBlast.GasMode); }
// SPDX-License-Identifier: MIT pragma solidity 0.8.20; /** * @title IBlast * @notice Interface for Blast. */ interface IBlast { enum YieldMode { AUTOMATIC, VOID, CLAIMABLE } enum GasMode { VOID, CLAIMABLE } // configure function configureContract(address contractAddress, YieldMode _yield, GasMode gasMode, address governor) external; function configure(YieldMode _yield, GasMode gasMode, address governor) external; // base configuration options function configureClaimableYield() external; function configureClaimableYieldOnBehalf(address contractAddress) external; function configureAutomaticYield() external; function configureAutomaticYieldOnBehalf(address contractAddress) external; function configureVoidYield() external; function configureVoidYieldOnBehalf(address contractAddress) external; function configureClaimableGas() external; function configureClaimableGasOnBehalf(address contractAddress) external; function configureVoidGas() external; function configureVoidGasOnBehalf(address contractAddress) external; function configureGovernor(address _governor) external; function configureGovernorOnBehalf(address _newGovernor, address contractAddress) external; // claim yield function claimYield(address contractAddress, address recipientOfYield, uint256 amount) external returns (uint256); function claimAllYield(address contractAddress, address recipientOfYield) external returns (uint256); // claim gas function claimAllGas(address contractAddress, address recipientOfGas) external returns (uint256); function claimGasAtMinClaimRate(address contractAddress, address recipientOfGas, uint256 minClaimRateBips) external returns (uint256); function claimMaxGas(address contractAddress, address recipientOfGas) external returns (uint256); function claimGas(address contractAddress, address recipientOfGas, uint256 gasToClaim, uint256 gasSecondsToConsume) external returns (uint256); // read functions function readClaimableYield(address contractAddress) external view returns (uint256); function readYieldConfiguration(address contractAddress) external view returns (uint8); function readGasParams(address contractAddress) external view returns (uint256 etherSeconds, uint256 etherBalance, uint256 lastUpdated, GasMode); }
{ "remappings": [ "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "@erc721a-upgradeable/=lib/ERC721A-Upgradeable/contracts/", "ds-test/=lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "@openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", "@openzeppelin-contracts/=lib/openzeppelin-contracts/", "@solady/=lib/solady/", "@v2-core/=lib/v2-core/contracts/", "@v2-periphery/=lib/v2-periphery/contracts/", "ERC721A-Upgradeable/=lib/ERC721A-Upgradeable/contracts/", "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "solady/=lib/solady/", "v2-core/=lib/v2-core/contracts/", "v2-periphery/=lib/v2-periphery/contracts/" ], "optimizer": { "enabled": true, "runs": 1000000 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "viaIR": false, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyInitialized","type":"error"},{"inputs":[],"name":"NewOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"NoHandoverRequest","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"GasClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pendingOwner","type":"address"}],"name":"OwnershipHandoverRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"YieldClaimed","type":"event"},{"inputs":[],"name":"BLAST","outputs":[{"internalType":"contract IBlast","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"claimAllGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"receiver","type":"address"}],"name":"claimAllYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"completeOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"enum IBlast.YieldMode","name":"yieldMode","type":"uint8"},{"internalType":"enum IBlast.GasMode","name":"gasMode","type":"uint8"},{"internalType":"address","name":"newGovernor","type":"address"}],"name":"configureContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"newGovernor","type":"address"}],"name":"configureGovernorOnBehalf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"result","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pendingOwner","type":"address"}],"name":"ownershipHandoverExpiresAt","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"readClaimableYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"readGasParams","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"enum IBlast.GasMode","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"readYieldConfiguration","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"requestOwnershipHandover","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60a060405273430000000000000000000000000000000000000260805234801561002857600080fd5b506080516001600160a01b0316634e606c476040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561006657600080fd5b505af115801561007a573d6000803e3d6000fd5b5050505061008d3361009260201b60201c565b6100ce565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b608051610dd761011a600039600081816101f3015281816103c1015281816105240152818161068c0152818161080f0152818161088e015281816109500152610a720152610dd76000f3fe6080604052600436106100e85760003560e01c8063954fa5ee1161008a578063f04e283e11610059578063f04e283e14610273578063f2fde38b14610286578063fd8c4b9d14610299578063fee81cf4146102cb57600080fd5b8063954fa5ee146101c157806397d75776146101e1578063dde798a414610215578063ec3278e81461024557600080fd5b806354d1f13d116100c657806354d1f13d14610137578063715018a61461013f578063860043b6146101475780638da5cb5b1461016757600080fd5b80630ca12c4b146100ed578063256929621461010f5780634c802f3814610117575b600080fd5b3480156100f957600080fd5b5061010d610108366004610ba4565b6102fe565b005b61010d610421565b34801561012357600080fd5b5061010d610132366004610be4565b610471565b61010d610597565b61010d6105d3565b34801561015357600080fd5b5061010d610162366004610ba4565b6105e7565b34801561017357600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927545b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101cd57600080fd5b5061010d6101dc366004610ba4565b61076a565b3480156101ed57600080fd5b506101977f000000000000000000000000000000000000000000000000000000000000000081565b34801561022157600080fd5b50610235610230366004610c40565b610840565b6040516101b89493929190610ca5565b34801561025157600080fd5b50610265610260366004610c40565b610908565b6040519081526020016101b8565b61010d610281366004610c40565b6109c3565b61010d610294366004610c40565b610a03565b3480156102a557600080fd5b506102b96102b4366004610c40565b610a2a565b60405160ff90911681526020016101b8565b3480156102d757600080fd5b506102656102e6366004610c40565b63389a75e1600c908152600091909152602090205490565b610306610adf565b73ffffffffffffffffffffffffffffffffffffffff8216158061033d575073ffffffffffffffffffffffffffffffffffffffff8116155b15610374576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0ca12c4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283811660248301527f00000000000000000000000000000000000000000000000000000000000000001690630ca12c4b90604401600060405180830381600087803b15801561040557600080fd5b505af1158015610419573d6000803e3d6000fd5b505050505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610479610adf565b73ffffffffffffffffffffffffffffffffffffffff841615806104b0575073ffffffffffffffffffffffffffffffffffffffff8116155b156104e7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f4c802f3800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634c802f389061055f908790879087908790600401610cd0565b600060405180830381600087803b15801561057957600080fd5b505af115801561058d573d6000803e3d6000fd5b5050505050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b6105db610adf565b6105e56000610b15565b565b6105ef610adf565b73ffffffffffffffffffffffffffffffffffffffff811661063c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f860043b600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063860043b6906044015b6020604051808303816000875af11580156106d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fc9190610d24565b90508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc0712597283a6d74cb9af5ac60a42d758bea66cdff184fed8990fa9b4f5b62328360405161075d91815260200190565b60405180910390a3505050565b610772610adf565b73ffffffffffffffffffffffffffffffffffffffff81166107bf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f954fa5ee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063954fa5ee906044016106b9565b6040517fdde798a400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000918291829182917f0000000000000000000000000000000000000000000000000000000000000000169063dde798a490602401608060405180830381865afa1580156108d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f99190610d3d565b93509350935093509193509193565b6040517fec3278e800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063ec3278e890602401602060405180830381865afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd9190610d24565b92915050565b6109cb610adf565b63389a75e1600c52806000526020600c2080544211156109f357636f5e88186000526004601cfd5b60009055610a0081610b15565b50565b610a0b610adf565b8060601b610a2157637448fbae6000526004601cfd5b610a0081610b15565b6040517ffd8c4b9d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063fd8c4b9d90602401602060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd9190610d7e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275433146105e5576382b429006000526004601cfd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b9f57600080fd5b919050565b60008060408385031215610bb757600080fd5b610bc083610b7b565b9150610bce60208401610b7b565b90509250929050565b60028110610a0057600080fd5b60008060008060808587031215610bfa57600080fd5b610c0385610b7b565b9350602085013560038110610c1757600080fd5b92506040850135610c2781610bd7565b9150610c3560608601610b7b565b905092959194509250565b600060208284031215610c5257600080fd5b610c5b82610b7b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028110610ca157610ca1610c62565b9052565b848152602081018490526040810183905260808101610cc76060830184610c91565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8581168252608082019060038610610cff57610cff610c62565b856020840152610d126040840186610c91565b80841660608401525095945050505050565b600060208284031215610d3657600080fd5b5051919050565b60008060008060808587031215610d5357600080fd5b8451935060208501519250604085015191506060850151610d7381610bd7565b939692955090935050565b600060208284031215610d9057600080fd5b815160ff81168114610c5b57600080fdfea2646970667358221220923cc75f8fc8abff71e5c2e95214293c7f598e6c82c323bcd8ba37d98fbd20f164736f6c63430008140033
Deployed Bytecode
0x6080604052600436106100e85760003560e01c8063954fa5ee1161008a578063f04e283e11610059578063f04e283e14610273578063f2fde38b14610286578063fd8c4b9d14610299578063fee81cf4146102cb57600080fd5b8063954fa5ee146101c157806397d75776146101e1578063dde798a414610215578063ec3278e81461024557600080fd5b806354d1f13d116100c657806354d1f13d14610137578063715018a61461013f578063860043b6146101475780638da5cb5b1461016757600080fd5b80630ca12c4b146100ed578063256929621461010f5780634c802f3814610117575b600080fd5b3480156100f957600080fd5b5061010d610108366004610ba4565b6102fe565b005b61010d610421565b34801561012357600080fd5b5061010d610132366004610be4565b610471565b61010d610597565b61010d6105d3565b34801561015357600080fd5b5061010d610162366004610ba4565b6105e7565b34801561017357600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927545b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101cd57600080fd5b5061010d6101dc366004610ba4565b61076a565b3480156101ed57600080fd5b506101977f000000000000000000000000430000000000000000000000000000000000000281565b34801561022157600080fd5b50610235610230366004610c40565b610840565b6040516101b89493929190610ca5565b34801561025157600080fd5b50610265610260366004610c40565b610908565b6040519081526020016101b8565b61010d610281366004610c40565b6109c3565b61010d610294366004610c40565b610a03565b3480156102a557600080fd5b506102b96102b4366004610c40565b610a2a565b60405160ff90911681526020016101b8565b3480156102d757600080fd5b506102656102e6366004610c40565b63389a75e1600c908152600091909152602090205490565b610306610adf565b73ffffffffffffffffffffffffffffffffffffffff8216158061033d575073ffffffffffffffffffffffffffffffffffffffff8116155b15610374576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0ca12c4b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff828116600483015283811660248301527f00000000000000000000000043000000000000000000000000000000000000021690630ca12c4b90604401600060405180830381600087803b15801561040557600080fd5b505af1158015610419573d6000803e3d6000fd5b505050505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610479610adf565b73ffffffffffffffffffffffffffffffffffffffff841615806104b0575073ffffffffffffffffffffffffffffffffffffffff8116155b156104e7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f4c802f3800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000043000000000000000000000000000000000000021690634c802f389061055f908790879087908790600401610cd0565b600060405180830381600087803b15801561057957600080fd5b505af115801561058d573d6000803e3d6000fd5b5050505050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b6105db610adf565b6105e56000610b15565b565b6105ef610adf565b73ffffffffffffffffffffffffffffffffffffffff811661063c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f860043b600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000043000000000000000000000000000000000000029091169063860043b6906044015b6020604051808303816000875af11580156106d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fc9190610d24565b90508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc0712597283a6d74cb9af5ac60a42d758bea66cdff184fed8990fa9b4f5b62328360405161075d91815260200190565b60405180910390a3505050565b610772610adf565b73ffffffffffffffffffffffffffffffffffffffff81166107bf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f954fa5ee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301526000917f00000000000000000000000043000000000000000000000000000000000000029091169063954fa5ee906044016106b9565b6040517fdde798a400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000918291829182917f0000000000000000000000004300000000000000000000000000000000000002169063dde798a490602401608060405180830381865afa1580156108d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f99190610d3d565b93509350935093509193509193565b6040517fec3278e800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000043000000000000000000000000000000000000029091169063ec3278e890602401602060405180830381865afa158015610999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd9190610d24565b92915050565b6109cb610adf565b63389a75e1600c52806000526020600c2080544211156109f357636f5e88186000526004601cfd5b60009055610a0081610b15565b50565b610a0b610adf565b8060601b610a2157637448fbae6000526004601cfd5b610a0081610b15565b6040517ffd8c4b9d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000043000000000000000000000000000000000000029091169063fd8c4b9d90602401602060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bd9190610d7e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739275433146105e5576382b429006000526004601cfd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b9f57600080fd5b919050565b60008060408385031215610bb757600080fd5b610bc083610b7b565b9150610bce60208401610b7b565b90509250929050565b60028110610a0057600080fd5b60008060008060808587031215610bfa57600080fd5b610c0385610b7b565b9350602085013560038110610c1757600080fd5b92506040850135610c2781610bd7565b9150610c3560608601610b7b565b905092959194509250565b600060208284031215610c5257600080fd5b610c5b82610b7b565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028110610ca157610ca1610c62565b9052565b848152602081018490526040810183905260808101610cc76060830184610c91565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8581168252608082019060038610610cff57610cff610c62565b856020840152610d126040840186610c91565b80841660608401525095945050505050565b600060208284031215610d3657600080fd5b5051919050565b60008060008060808587031215610d5357600080fd5b8451935060208501519250604085015191506060850151610d7381610bd7565b939692955090935050565b600060208284031215610d9057600080fd5b815160ff81168114610c5b57600080fdfea2646970667358221220923cc75f8fc8abff71e5c2e95214293c7f598e6c82c323bcd8ba37d98fbd20f164736f6c63430008140033
Loading...
Loading
Loading...
Loading
[ 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.