More Info
Private Name Tags
ContractCreator
Multichain Info
2 addresses found via
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17902243 | 9 days ago | 0.003 ETH | ||||
17801467 | 11 days ago | 0.012 ETH | ||||
17754919 | 12 days ago | 0.05 ETH | ||||
17577167 | 16 days ago | 0.034 ETH | ||||
17465762 | 19 days ago | 0.398 ETH | ||||
17063852 | 28 days ago | 0.002 ETH | ||||
17043514 | 28 days ago | 0.032 ETH | ||||
17039293 | 29 days ago | 0.008 ETH | ||||
16989200 | 30 days ago | 5.314 ETH | ||||
16910392 | 32 days ago | 0.002 ETH | ||||
16910392 | 32 days ago | Contract Creation | 0 ETH | |||
16890430 | 32 days ago | 0.11 ETH | ||||
16829364 | 33 days ago | 0.094 ETH | ||||
16577734 | 39 days ago | 0.088 ETH | ||||
16164825 | 49 days ago | 0.054 ETH | ||||
16164825 | 49 days ago | Contract Creation | 0 ETH | |||
16144994 | 49 days ago | 0.02 ETH | ||||
16097407 | 50 days ago | 0.002 ETH | ||||
15835391 | 56 days ago | 0.03 ETH | ||||
15789963 | 57 days ago | 2.5 ETH | ||||
15493810 | 64 days ago | 0.182 ETH | ||||
15487865 | 64 days ago | 0.074 ETH | ||||
15188833 | 71 days ago | 0.03 ETH | ||||
14905284 | 78 days ago | 0.289 ETH | ||||
14872082 | 79 days ago | 1.866 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
EthStakeRegistry
Compiler Version
v0.8.23+commit.f704f362
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity >=0.8.23 <0.9.0; import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; import { Clones } from "@openzeppelin/contracts/proxy/Clones.sol"; import { IBlast } from "./interface/IBlast.sol"; import { IBlastPoints } from "./interface/IBlastPoints.sol"; import { EthStakingContract } from "./EthStakingContract.sol"; import { IEthStakeRegistry } from "./interface/IEthStakeRegistry.sol"; import { IEthStakeHooks } from "../src/interface/IEthStakeHooks.sol"; import { ERC165Checker } from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; import { Error } from "./utils/Error.sol"; contract EthStakeRegistry is IEthStakeRegistry, Ownable, Error { IBlast public immutable BLAST; IBlastPoints public immutable BLAST_POINTS; address public immutable STAKING_CONTRACT_IMPLEMENTATION; address public immutable BLAST_POINTS_OPERATOR; event Stake(address indexed service, address indexed user, uint256 amount); event Unstake(address indexed service, address indexed user, address indexed to, uint256 amount); event Log(string reason); event LogBytes(bytes reason); uint256 public constant MAX_GAS_LIMIT = 3_000_000; /* ============ Constructor ============ */ constructor( address blast, address blastPoints, address gasCollector, address pointsOperator ) payable Ownable(gasCollector) { STAKING_CONTRACT_IMPLEMENTATION = address(new EthStakingContract()); BLAST_POINTS_OPERATOR = pointsOperator; BLAST = IBlast(blast); BLAST.configureClaimableGas(); BLAST.configureGovernor(gasCollector); BLAST_POINTS = IBlastPoints(blastPoints); BLAST_POINTS.configurePointsOperator(pointsOperator); } /* ============ Admin Gas Functions ============ */ function claimAllGas(address contractAddress, address recipient) public onlyOwner { BLAST.claimAllGas(contractAddress, recipient); } function claimMaxGas(address contractAddress, address recipient) public onlyOwner { BLAST.claimMaxGas(contractAddress, recipient); } /* ============ External Functions ============ */ function stake(address service, bytes memory data) external payable { if (msg.value == 0) { revert InvalidValue(); } address userStakeContract = getUserStakingContract(service, msg.sender); if (!_isContract(userStakeContract)) { _deployStakingContract(service, msg.sender); } _beforeStake(service, msg.sender, msg.value, data); EthStakingContract(userStakeContract).deposit{ value: msg.value }(); _afterStake(service, msg.sender, msg.value, data); emit Stake(service, msg.sender, msg.value); } function unstake(address service, address payable to, uint256 amount, bytes memory data) external { if (amount == 0) { revert InvalidValue(); } address userStakeContract = getUserStakingContract(service, msg.sender); _beforeUnstake(service, msg.sender, amount, data); EthStakingContract(userStakeContract).withdraw(to, amount); _afterUnstake(service, msg.sender, amount, data); emit Unstake(service, msg.sender, to, amount); } /* ============ View Functions ============ */ function getUserStakingContract(address service, address user) public view returns (address) { return Clones.predictDeterministicAddress( STAKING_CONTRACT_IMPLEMENTATION, keccak256(abi.encodePacked(service, user)) ); } function getUserStakingContractBalance(address service, address user) public view returns (uint256) { return getUserStakingContract(service, user).balance; } /* ============ Internal Functions ============ */ function _isContract(address account) internal view returns (bool) { uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } function _deployStakingContract(address service, address user) internal { address stakingContract = Clones.cloneDeterministic(STAKING_CONTRACT_IMPLEMENTATION, keccak256(abi.encodePacked(service, user))); EthStakingContract(stakingContract).init(address(BLAST), address(BLAST_POINTS), service, BLAST_POINTS_OPERATOR); } function _beforeStake(address service, address user, uint256 amount, bytes memory data) internal { if (ERC165Checker.supportsInterface(service, type(IEthStakeHooks).interfaceId)) { try IEthStakeHooks(service).beforeStake{ gas: MAX_GAS_LIMIT }(user, amount, data) returns (bool success) { if (!success) { emit Log("error"); } } catch Error(string memory reason) { emit Log(reason); } catch (bytes memory reason) { emit LogBytes(reason); } } } function _afterStake(address service, address user, uint256 amount, bytes memory data) internal { if (ERC165Checker.supportsInterface(service, type(IEthStakeHooks).interfaceId)) { try IEthStakeHooks(service).afterStake{ gas: MAX_GAS_LIMIT }(user, amount, data) returns (bool success) { if (!success) { emit Log("error"); } } catch Error(string memory reason) { emit Log(reason); } catch (bytes memory reason) { emit LogBytes(reason); } } } function _beforeUnstake(address service, address user, uint256 amount, bytes memory data) internal { if (ERC165Checker.supportsInterface(service, type(IEthStakeHooks).interfaceId)) { try IEthStakeHooks(service).beforeUnstake{ gas: MAX_GAS_LIMIT }(user, amount, data) returns (bool success) { if (!success) { emit Log("error"); } } catch Error(string memory reason) { emit Log(reason); } catch (bytes memory reason) { emit LogBytes(reason); } } } function _afterUnstake(address service, address user, uint256 amount, bytes memory data) internal { if (ERC165Checker.supportsInterface(service, type(IEthStakeHooks).interfaceId)) { try IEthStakeHooks(service).afterUnstake{ gas: MAX_GAS_LIMIT }(user, amount, data) returns (bool success) { if (!success) { emit Log("error"); } } catch Error(string memory reason) { emit Log(reason); } catch (bytes memory reason) { emit LogBytes(reason); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (proxy/Clones.sol) pragma solidity ^0.8.20; /** * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for * deploying minimal proxy contracts, also known as "clones". * * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies * > a minimal bytecode implementation that delegates all calls to a known, fixed address. * * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2` * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the * deterministic method. */ library Clones { /** * @dev A clone instance deployment failed. */ error ERC1167FailedCreateClone(); /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create opcode, which should never revert. */ function clone(address implementation) internal returns (address instance) { /// @solidity memory-safe-assembly assembly { // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes // of the `implementation` address with the bytecode before the address. mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000)) // Packs the remaining 17 bytes of `implementation` with the bytecode after the address. mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3)) instance := create(0, 0x09, 0x37) } if (instance == address(0)) { revert ERC1167FailedCreateClone(); } } /** * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`. * * This function uses the create2 opcode and a `salt` to deterministically deploy * the clone. Using the same `implementation` and `salt` multiple time will revert, since * the clones cannot be deployed twice at the same address. */ function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) { /// @solidity memory-safe-assembly assembly { // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes // of the `implementation` address with the bytecode before the address. mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000)) // Packs the remaining 17 bytes of `implementation` with the bytecode after the address. mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3)) instance := create2(0, 0x09, 0x37, salt) } if (instance == address(0)) { revert ERC1167FailedCreateClone(); } } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress( address implementation, bytes32 salt, address deployer ) internal pure returns (address predicted) { /// @solidity memory-safe-assembly assembly { let ptr := mload(0x40) mstore(add(ptr, 0x38), deployer) mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff) mstore(add(ptr, 0x14), implementation) mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73) mstore(add(ptr, 0x58), salt) mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37)) predicted := keccak256(add(ptr, 0x43), 0x55) } } /** * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}. */ function predictDeterministicAddress( address implementation, bytes32 salt ) internal view returns (address predicted) { return predictDeterministicAddress(implementation, salt, address(this)); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.23 <0.9.0; enum YieldMode { AUTOMATIC, VOID, CLAIMABLE } enum GasMode { VOID, CLAIMABLE } interface IBlast { function YIELD_CONTRACT() external view returns (address); function GAS_CONTRACT() external view returns (address); // 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); } interface IYield { function configure(address contractAddress, uint8 flags) external returns (uint256); function claim( address contractAddress, address recipientOfYield, uint256 desiredAmount ) external returns (uint256); function getClaimableAmount(address contractAddress) external view returns (uint256); function getConfiguration(address contractAddress) external view returns (uint8); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.23 <0.9.0; interface IBlastPoints { function configurePointsOperator(address operator) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.23 <0.9.0; import { IBlast, YieldMode, GasMode } from "./interface/IBlast.sol"; import { IBlastPoints } from "./interface/IBlastPoints.sol"; import { IEthStakeRegistry } from "./interface/IEthStakeRegistry.sol"; import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; import { Error } from "./utils/Error.sol"; contract EthStakingContract is Initializable, Error { address public serviceContract; address public stakeRegistry; event Deposit(uint256 amount); event Withdraw(address to, uint256 amount); /* ============ Initializer ============ */ function init( address blast, address blastPoints, address _serviceContract, address pointsOperator ) public initializer { stakeRegistry = msg.sender; serviceContract = _serviceContract; IBlast(blast).configureContract(address(this), YieldMode.AUTOMATIC, GasMode.CLAIMABLE, stakeRegistry); IBlastPoints(blastPoints).configurePointsOperator(pointsOperator); } /* ============ Modifier ============ */ modifier onlyStakeRegistry() { if (msg.sender != stakeRegistry) { revert OnlyStakeRegistry(); } _; } /* ============ External Functions ============ */ function deposit() external payable onlyStakeRegistry { emit Deposit(msg.value); } function withdraw(address payable to, uint256 amount) external onlyStakeRegistry { to.transfer(amount); emit Withdraw(to, amount); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.23 <0.9.0; interface IEthStakeRegistry { function getUserStakingContract(address service, address user) external view returns (address); function getUserStakingContractBalance(address service, address user) external view returns (uint256); function stake(address user, bytes memory data) external payable; function unstake(address user, address payable to, uint256 amount, bytes memory data) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.23 <0.9.0; interface IEthStakeHooks { function beforeStake(address user, uint256 amount, bytes memory data) external returns (bool); function afterStake(address user, uint256 amount, bytes memory data) external returns (bool); function beforeUnstake(address user, uint256 amount, bytes memory data) external returns (bool); function afterUnstake(address user, uint256 amount, bytes memory data) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165Checker.sol) pragma solidity ^0.8.20; import {IERC165} from "./IERC165.sol"; /** * @dev Library used to query support of an interface declared via {IERC165}. * * Note that these functions return the actual result of the query: they do not * `revert` if an interface is not supported. It is up to the caller to decide * what to do in these cases. */ library ERC165Checker { // As per the EIP-165 spec, no interface should ever match 0xffffffff bytes4 private constant INTERFACE_ID_INVALID = 0xffffffff; /** * @dev Returns true if `account` supports the {IERC165} interface. */ function supportsERC165(address account) internal view returns (bool) { // Any contract that implements ERC165 must explicitly indicate support of // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid return supportsERC165InterfaceUnchecked(account, type(IERC165).interfaceId) && !supportsERC165InterfaceUnchecked(account, INTERFACE_ID_INVALID); } /** * @dev Returns true if `account` supports the interface defined by * `interfaceId`. Support for {IERC165} itself is queried automatically. * * See {IERC165-supportsInterface}. */ function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) { // query support of both ERC165 as per the spec and support of _interfaceId return supportsERC165(account) && supportsERC165InterfaceUnchecked(account, interfaceId); } /** * @dev Returns a boolean array where each value corresponds to the * interfaces passed in and whether they're supported or not. This allows * you to batch check interfaces for a contract where your expectation * is that some interfaces may not be supported. * * See {IERC165-supportsInterface}. */ function getSupportedInterfaces( address account, bytes4[] memory interfaceIds ) internal view returns (bool[] memory) { // an array of booleans corresponding to interfaceIds and whether they're supported or not bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length); // query support of ERC165 itself if (supportsERC165(account)) { // query support of each interface in interfaceIds for (uint256 i = 0; i < interfaceIds.length; i++) { interfaceIdsSupported[i] = supportsERC165InterfaceUnchecked(account, interfaceIds[i]); } } return interfaceIdsSupported; } /** * @dev Returns true if `account` supports all the interfaces defined in * `interfaceIds`. Support for {IERC165} itself is queried automatically. * * Batch-querying can lead to gas savings by skipping repeated checks for * {IERC165} support. * * See {IERC165-supportsInterface}. */ function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) { // query support of ERC165 itself if (!supportsERC165(account)) { return false; } // query support of each interface in interfaceIds for (uint256 i = 0; i < interfaceIds.length; i++) { if (!supportsERC165InterfaceUnchecked(account, interfaceIds[i])) { return false; } } // all interfaces supported return true; } /** * @notice Query if a contract implements an interface, does not check ERC165 support * @param account The address of the contract to query for support of an interface * @param interfaceId The interface identifier, as specified in ERC-165 * @return true if the contract at account indicates support of the interface with * identifier interfaceId, false otherwise * @dev Assumes that account contains a contract that supports ERC165, otherwise * the behavior of this method is undefined. This precondition can be checked * with {supportsERC165}. * * Some precompiled contracts will falsely indicate support for a given interface, so caution * should be exercised when using this function. * * Interface identification is specified in ERC-165. */ function supportsERC165InterfaceUnchecked(address account, bytes4 interfaceId) internal view returns (bool) { // prepare call bytes memory encodedParams = abi.encodeCall(IERC165.supportsInterface, (interfaceId)); // perform static call bool success; uint256 returnSize; uint256 returnValue; assembly { success := staticcall(30000, account, add(encodedParams, 0x20), mload(encodedParams), 0x00, 0x20) returnSize := returndatasize() returnValue := mload(0x00) } return success && returnSize >= 0x20 && returnValue > 0; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.23 <0.9.0; /// @title Error contract /// @dev Contracts should inherit from this contract to use custom errors contract Error { error OnlyStakeRegistry(); error InvalidValue(); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol) pragma solidity ^0.8.20; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in * case an upgrade adds a module that needs to be initialized. * * For example: * * [.hljs-theme-light.nopadding] * ```solidity * contract MyToken is ERC20Upgradeable { * function initialize() initializer public { * __ERC20_init("MyToken", "MTK"); * } * } * * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { * function initializeV2() reinitializer(2) public { * __ERC20Permit_init("MyToken"); * } * } * ``` * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. * * [CAUTION] * ==== * Avoid leaving a contract uninitialized. * * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: * * [.hljs-theme-light.nopadding] * ``` * /// @custom:oz-upgrades-unsafe-allow constructor * constructor() { * _disableInitializers(); * } * ``` * ==== */ abstract contract Initializable { /** * @dev Storage of the initializable contract. * * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions * when using with upgradeable contracts. * * @custom:storage-location erc7201:openzeppelin.storage.Initializable */ struct InitializableStorage { /** * @dev Indicates that the contract has been initialized. */ uint64 _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool _initializing; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Initializable")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00; /** * @dev The contract is already initialized. */ error InvalidInitialization(); /** * @dev The contract is not initializing. */ error NotInitializing(); /** * @dev Triggered when the contract has been initialized or reinitialized. */ event Initialized(uint64 version); /** * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope, * `onlyInitializing` functions can be used to initialize parent contracts. * * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in * production. * * Emits an {Initialized} event. */ modifier initializer() { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); // Cache values to avoid duplicated sloads bool isTopLevelCall = !$._initializing; uint64 initialized = $._initialized; // Allowed calls: // - initialSetup: the contract is not in the initializing state and no previous version was // initialized // - construction: the contract is initialized at version 1 (no reininitialization) and the // current contract is just being deployed bool initialSetup = initialized == 0 && isTopLevelCall; bool construction = initialized == 1 && address(this).code.length == 0; if (!initialSetup && !construction) { revert InvalidInitialization(); } $._initialized = 1; if (isTopLevelCall) { $._initializing = true; } _; if (isTopLevelCall) { $._initializing = false; emit Initialized(1); } } /** * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be * used to initialize parent contracts. * * A reinitializer may be used after the original initialization step. This is essential to configure modules that * are added through upgrades and that require initialization. * * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer` * cannot be nested. If one is invoked in the context of another, execution will revert. * * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in * a contract, executing them in the right order is up to the developer or operator. * * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization. * * Emits an {Initialized} event. */ modifier reinitializer(uint64 version) { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); if ($._initializing || $._initialized >= version) { revert InvalidInitialization(); } $._initialized = version; $._initializing = true; _; $._initializing = false; emit Initialized(version); } /** * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the * {initializer} and {reinitializer} modifiers, directly or indirectly. */ modifier onlyInitializing() { _checkInitializing(); _; } /** * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}. */ function _checkInitializing() internal view virtual { if (!_isInitializing()) { revert NotInitializing(); } } /** * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call. * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized * to any version. It is recommended to use this to lock implementation contracts that are designed to be called * through proxies. * * Emits an {Initialized} event the first time it is successfully executed. */ function _disableInitializers() internal virtual { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); if ($._initializing) { revert InvalidInitialization(); } if ($._initialized != type(uint64).max) { $._initialized = type(uint64).max; emit Initialized(type(uint64).max); } } /** * @dev Returns the highest version that has been initialized. See {reinitializer}. */ function _getInitializedVersion() internal view returns (uint64) { return _getInitializableStorage()._initialized; } /** * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}. */ function _isInitializing() internal view returns (bool) { return _getInitializableStorage()._initializing; } /** * @dev Returns a pointer to the storage namespace. */ // solhint-disable-next-line var-name-mixedcase function _getInitializableStorage() private pure returns (InitializableStorage storage $) { assembly { $.slot := INITIALIZABLE_STORAGE } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "remappings": [ "@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/", "@prb/test/=node_modules/@prb/test/", "forge-std/=node_modules/forge-std/", "blast-staking-contract/=node_modules/blast-staking-contract/" ], "optimizer": { "enabled": true, "runs": 10000 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "none", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "evmVersion": "paris", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"blast","type":"address"},{"internalType":"address","name":"blastPoints","type":"address"},{"internalType":"address","name":"gasCollector","type":"address"},{"internalType":"address","name":"pointsOperator","type":"address"}],"stateMutability":"payable","type":"constructor"},{"inputs":[],"name":"ERC1167FailedCreateClone","type":"error"},{"inputs":[],"name":"InvalidValue","type":"error"},{"inputs":[],"name":"OnlyStakeRegistry","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"Log","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"reason","type":"bytes"}],"name":"LogBytes","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"service","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"service","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstake","type":"event"},{"inputs":[],"name":"BLAST","outputs":[{"internalType":"contract IBlast","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLAST_POINTS","outputs":[{"internalType":"contract IBlastPoints","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLAST_POINTS_OPERATOR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_GAS_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_CONTRACT_IMPLEMENTATION","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"claimAllGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"claimMaxGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"service","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getUserStakingContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"service","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getUserStakingContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"service","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"stake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"service","type":"address"},{"internalType":"address payable","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
61010060405260405162001e5d38038062001e5d833981016040819052620000279162000244565b816001600160a01b0381166200005757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200006281620001c9565b50604051620000719062000219565b604051809103906000f0801580156200008e573d6000803e3d6000fd5b506001600160a01b0390811660c05281811660e0528416608081905260408051634e606c4760e01b81529051634e606c479160048082019260009290919082900301818387803b158015620000e257600080fd5b505af1158015620000f7573d6000803e3d6000fd5b5050608051604051631d70c8d360e31b81526001600160a01b038681166004830152909116925063eb8646989150602401600060405180830381600087803b1580156200014357600080fd5b505af115801562000158573d6000803e3d6000fd5b505050506001600160a01b0383811660a08190526040516336b91f2b60e01b81529183166004830152906336b91f2b90602401600060405180830381600087803b158015620001a657600080fd5b505af1158015620001bb573d6000803e3d6000fd5b5050505050505050620002a1565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6106be806200179f83390190565b80516001600160a01b03811681146200023f57600080fd5b919050565b600080600080608085870312156200025b57600080fd5b620002668562000227565b9350620002766020860162000227565b9250620002866040860162000227565b9150620002966060860162000227565b905092959194509250565b60805160a05160c05160e0516114946200030b6000396000818160f40152610d09015260008181610172015281816103580152610c360152600081816101a60152610cd901526000818161028a0152818161041e015281816104fa0152610cb101526114946000f3fe6080604052600436106100dd5760003560e01c80638da5cb5b1161007f578063c148cf8511610059578063c148cf85146102ac578063c88d9ba6146102cc578063e3f5aa51146102df578063f2fde38b146102f657600080fd5b80638da5cb5b1461022d578063954fa5ee1461025857806397d757761461027857600080fd5b80634b8f9025116100bb5780634b8f902514610194578063539c3416146101c8578063662aa11d146101f6578063715018a61461021857600080fd5b806308d28cc2146100e25780632fd85e8d14610140578063336942fb14610160575b600080fd5b3480156100ee57600080fd5b506101167f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561014c57600080fd5b5061011661015b3660046110ae565b610316565b34801561016c57600080fd5b506101167f000000000000000000000000000000000000000000000000000000000000000081565b3480156101a057600080fd5b506101167f000000000000000000000000000000000000000000000000000000000000000081565b3480156101d457600080fd5b506101e86101e33660046110ae565b61039f565b604051908152602001610137565b34801561020257600080fd5b506102166102113660046110ae565b6103c9565b005b34801561022457600080fd5b50610216610491565b34801561023957600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610116565b34801561026457600080fd5b506102166102733660046110ae565b6104a5565b34801561028457600080fd5b506101167f000000000000000000000000000000000000000000000000000000000000000081565b3480156102b857600080fd5b506102166102c73660046111f3565b610529565b6102166102da36600461125f565b610696565b3480156102eb57600080fd5b506101e8622dc6c081565b34801561030257600080fd5b506102166103113660046112af565b6107b9565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152600090610396907f00000000000000000000000000000000000000000000000000000000000000009060480160405160208183030381529060405280519060200120610822565b90505b92915050565b60006103ab8383610316565b73ffffffffffffffffffffffffffffffffffffffff16319392505050565b6103d1610882565b6040517f662aa11d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063662aa11d906044015b6020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d3565b505050565b610499610882565b6104a360006108d5565b565b6104ad610882565b6040517f954fa5ee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063954fa5ee90604401610449565b81600003610563576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061056f8533610316565b905061057d8533858561094a565b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820185905282169063f3fef3a390604401600060405180830381600087803b1580156105ed57600080fd5b505af1158015610601573d6000803e3d6000fd5b5050505061061185338585610b6c565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f2cbcd809a4c90d11f8d12c4b6d09986b255ae1e68f54f076c145fbb2185904e18660405161068791815260200190565b60405180910390a45050505050565b346000036106d0576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006106dc8333610316565b9050803b6106ee576106ee8333610bf4565b6106fa83333485610d76565b8073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561074257600080fd5b505af1158015610756573d6000803e3d6000fd5b505050505061076783333485610e00565b604051348152339073ffffffffffffffffffffffffffffffffffffffff8516907f99039fcf0a98f484616c5196ee8b2ecfa971babf0b519848289ea4db381f85f79060200160405180910390a3505050565b6107c1610882565b73ffffffffffffffffffffffffffffffffffffffff8116610816576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b61081f816108d5565b50565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c82012060788201526055604390910120600090610396565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104a3576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161080d565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610974847f4501f36a00000000000000000000000000000000000000000000000000000000610e8a565b15610b66576040517fd9b85bb800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063d9b85bb890622dc6c0906109d490879087908790600401611350565b60206040518083038160008887f193505050508015610a2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a2b9181019061138e565b60015b610af757610a3a6113b0565b806308c379a003610a965750610a4e6113cc565b80610a595750610a98565b7fcf34ef537ac33ee1ac626ca1587a0a7e8e51561e5514f8cb36afa1c5102b3bab81604051610a889190611474565b60405180910390a150610b66565b505b3d808015610ac2576040519150601f19603f3d011682016040523d82523d6000602084013e610ac7565b606091505b507f532fd6ea96cfb78bb46e09279a26828b8b493de1a2b8b1ee1face527978a15a581604051610a889190611474565b80610b64577fcf34ef537ac33ee1ac626ca1587a0a7e8e51561e5514f8cb36afa1c5102b3bab604051610b5b9060208082526005908201527f6572726f72000000000000000000000000000000000000000000000000000000604082015260600190565b60405180910390a15b505b50505050565b610b96847f4501f36a00000000000000000000000000000000000000000000000000000000610e8a565b15610b66576040517e37a10300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516906237a10390622dc6c0906109d490879087908790600401611350565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152600090610c74907f00000000000000000000000000000000000000000000000000000000000000009060480160405160208183030381529060405280519060200120610ea6565b6040517f06552ff300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301527f00000000000000000000000000000000000000000000000000000000000000008116602483015285811660448301527f000000000000000000000000000000000000000000000000000000000000000081166064830152919250908216906306552ff390608401600060405180830381600087803b158015610d5957600080fd5b505af1158015610d6d573d6000803e3d6000fd5b50505050505050565b610da0847f4501f36a00000000000000000000000000000000000000000000000000000000610e8a565b15610b66576040517f9dcfa8c600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690639dcfa8c690622dc6c0906109d490879087908790600401611350565b610e2a847f4501f36a00000000000000000000000000000000000000000000000000000000610e8a565b15610b66576040517f0141a11700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690630141a11790622dc6c0906109d490879087908790600401611350565b6000610e9583610f3a565b801561039657506103968383610f9e565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f5905073ffffffffffffffffffffffffffffffffffffffff8116610399576040517fc2f868f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f66827f01ffc9a700000000000000000000000000000000000000000000000000000000610f9e565b80156103995750610f97827fffffffff00000000000000000000000000000000000000000000000000000000610f9e565b1592915050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000821660248201526000908190604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825192935060009283928392909183918a617530fa92503d91506000519050828015611075575060208210155b80156110815750600081115b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461081f57600080fd5b600080604083850312156110c157600080fd5b82356110cc8161108c565b915060208301356110dc8161108c565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff8211171561115a5761115a6110e7565b6040525050565b600082601f83011261117257600080fd5b813567ffffffffffffffff81111561118c5761118c6110e7565b6040516111c160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160182611116565b8181528460208386010111156111d657600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561120957600080fd5b84356112148161108c565b935060208501356112248161108c565b925060408501359150606085013567ffffffffffffffff81111561124757600080fd5b61125387828801611161565b91505092959194509250565b6000806040838503121561127257600080fd5b823561127d8161108c565b9150602083013567ffffffffffffffff81111561129957600080fd5b6112a585828601611161565b9150509250929050565b6000602082840312156112c157600080fd5b81356112cc8161108c565b9392505050565b6000602082840312156112e557600080fd5b5051919050565b6000815180845260005b81811015611312576020818501810151868301820152016112f6565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b73ffffffffffffffffffffffffffffffffffffffff8416815282602082015260606040820152600061138560608301846112ec565b95945050505050565b6000602082840312156113a057600080fd5b815180151581146112cc57600080fd5b600060033d11156113c95760046000803e5060005160e01c5b90565b600060443d10156113da5790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff816024840111818411171561142857505050505090565b82850191508151818111156114405750505050505090565b843d870101602082850101111561145a5750505050505090565b61146960208286010187611116565b509095945050505050565b60208152600061039660208301846112ec56fea164736f6c6343000817000a608060405234801561001057600080fd5b5061069e806100206000396000f3fe60806040526004361061005a5760003560e01c8063683048351161004357806368304835146100d7578063d0e30db014610104578063f3fef3a31461010c57600080fd5b806306552ff31461005f578063364dab1014610081575b600080fd5b34801561006b57600080fd5b5061007f61007a36600461057d565b61012c565b005b34801561008d57600080fd5b506000546100ae9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100e357600080fd5b506001546100ae9073ffffffffffffffffffffffffffffffffffffffff1681565b61007f6103ea565b34801561011857600080fd5b5061007f6101273660046105d9565b610470565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156101775750825b905060008267ffffffffffffffff1660011480156101945750303b155b9050811580156101a2575080155b156101d9576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001178555831561023a5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163390811783556000805473ffffffffffffffffffffffffffffffffffffffff8c8116919094161781556040517f4c802f38000000000000000000000000000000000000000000000000000000008152928d1693634c802f38936102cb9330939291600401610634565b600060405180830381600087803b1580156102e557600080fd5b505af11580156102f9573d6000803e3d6000fd5b50506040517f36b91f2b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301528b1692506336b91f2b9150602401600060405180830381600087803b15801561036657600080fd5b505af115801561037a573d6000803e3d6000fd5b5050505083156103df5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461043b576040517f46bf228100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040513481527f4d6ce1e535dbade1c23defba91e23b8f791ce5edc0cc320257a2b364e4e384269060200160405180910390a1565b60015473ffffffffffffffffffffffffffffffffffffffff1633146104c1576040517f46bf228100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f19350505050158015610504573d6000803e3d6000fd5b506040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364910160405180910390a15050565b73ffffffffffffffffffffffffffffffffffffffff8116811461057a57600080fd5b50565b6000806000806080858703121561059357600080fd5b843561059e81610558565b935060208501356105ae81610558565b925060408501356105be81610558565b915060608501356105ce81610558565b939692955090935050565b600080604083850312156105ec57600080fd5b82356105f781610558565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff858116825260808201906003861061066357610663610605565b8560208401526002851061067957610679610605565b8460408401528084166060840152509594505050505056fea164736f6c6343000817000a00000000000000000000000043000000000000000000000000000000000000020000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd8000000000000000000000000002440427f615aa44ea7b3322df72189123f922c0a000000000000000000000000001ebb83cde40f8a5b2c3dbb585ae05ffc1fa7da
Deployed Bytecode
0x6080604052600436106100dd5760003560e01c80638da5cb5b1161007f578063c148cf8511610059578063c148cf85146102ac578063c88d9ba6146102cc578063e3f5aa51146102df578063f2fde38b146102f657600080fd5b80638da5cb5b1461022d578063954fa5ee1461025857806397d757761461027857600080fd5b80634b8f9025116100bb5780634b8f902514610194578063539c3416146101c8578063662aa11d146101f6578063715018a61461021857600080fd5b806308d28cc2146100e25780632fd85e8d14610140578063336942fb14610160575b600080fd5b3480156100ee57600080fd5b506101167f000000000000000000000000001ebb83cde40f8a5b2c3dbb585ae05ffc1fa7da81565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561014c57600080fd5b5061011661015b3660046110ae565b610316565b34801561016c57600080fd5b506101167f000000000000000000000000e3c6e0e9808ef2c0f9e70b48acc8879cffb7c37781565b3480156101a057600080fd5b506101167f0000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd80081565b3480156101d457600080fd5b506101e86101e33660046110ae565b61039f565b604051908152602001610137565b34801561020257600080fd5b506102166102113660046110ae565b6103c9565b005b34801561022457600080fd5b50610216610491565b34801561023957600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610116565b34801561026457600080fd5b506102166102733660046110ae565b6104a5565b34801561028457600080fd5b506101167f000000000000000000000000430000000000000000000000000000000000000281565b3480156102b857600080fd5b506102166102c73660046111f3565b610529565b6102166102da36600461125f565b610696565b3480156102eb57600080fd5b506101e8622dc6c081565b34801561030257600080fd5b506102166103113660046112af565b6107b9565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152600090610396907f000000000000000000000000e3c6e0e9808ef2c0f9e70b48acc8879cffb7c3779060480160405160208183030381529060405280519060200120610822565b90505b92915050565b60006103ab8383610316565b73ffffffffffffffffffffffffffffffffffffffff16319392505050565b6103d1610882565b6040517f662aa11d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f0000000000000000000000004300000000000000000000000000000000000002169063662aa11d906044015b6020604051808303816000875af1158015610468573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061048c91906112d3565b505050565b610499610882565b6104a360006108d5565b565b6104ad610882565b6040517f954fa5ee00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f0000000000000000000000004300000000000000000000000000000000000002169063954fa5ee90604401610449565b81600003610563576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061056f8533610316565b905061057d8533858561094a565b6040517ff3fef3a300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301526024820185905282169063f3fef3a390604401600060405180830381600087803b1580156105ed57600080fd5b505af1158015610601573d6000803e3d6000fd5b5050505061061185338585610b6c565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f2cbcd809a4c90d11f8d12c4b6d09986b255ae1e68f54f076c145fbb2185904e18660405161068791815260200190565b60405180910390a45050505050565b346000036106d0576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006106dc8333610316565b9050803b6106ee576106ee8333610bf4565b6106fa83333485610d76565b8073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561074257600080fd5b505af1158015610756573d6000803e3d6000fd5b505050505061076783333485610e00565b604051348152339073ffffffffffffffffffffffffffffffffffffffff8516907f99039fcf0a98f484616c5196ee8b2ecfa971babf0b519848289ea4db381f85f79060200160405180910390a3505050565b6107c1610882565b73ffffffffffffffffffffffffffffffffffffffff8116610816576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b61081f816108d5565b50565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c82012060788201526055604390910120600090610396565b60005473ffffffffffffffffffffffffffffffffffffffff1633146104a3576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161080d565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610974847f4501f36a00000000000000000000000000000000000000000000000000000000610e8a565b15610b66576040517fd9b85bb800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063d9b85bb890622dc6c0906109d490879087908790600401611350565b60206040518083038160008887f193505050508015610a2e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610a2b9181019061138e565b60015b610af757610a3a6113b0565b806308c379a003610a965750610a4e6113cc565b80610a595750610a98565b7fcf34ef537ac33ee1ac626ca1587a0a7e8e51561e5514f8cb36afa1c5102b3bab81604051610a889190611474565b60405180910390a150610b66565b505b3d808015610ac2576040519150601f19603f3d011682016040523d82523d6000602084013e610ac7565b606091505b507f532fd6ea96cfb78bb46e09279a26828b8b493de1a2b8b1ee1face527978a15a581604051610a889190611474565b80610b64577fcf34ef537ac33ee1ac626ca1587a0a7e8e51561e5514f8cb36afa1c5102b3bab604051610b5b9060208082526005908201527f6572726f72000000000000000000000000000000000000000000000000000000604082015260600190565b60405180910390a15b505b50505050565b610b96847f4501f36a00000000000000000000000000000000000000000000000000000000610e8a565b15610b66576040517e37a10300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516906237a10390622dc6c0906109d490879087908790600401611350565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b166034820152600090610c74907f000000000000000000000000e3c6e0e9808ef2c0f9e70b48acc8879cffb7c3779060480160405160208183030381529060405280519060200120610ea6565b6040517f06552ff300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004300000000000000000000000000000000000002811660048301527f0000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd8008116602483015285811660448301527f000000000000000000000000001ebb83cde40f8a5b2c3dbb585ae05ffc1fa7da81166064830152919250908216906306552ff390608401600060405180830381600087803b158015610d5957600080fd5b505af1158015610d6d573d6000803e3d6000fd5b50505050505050565b610da0847f4501f36a00000000000000000000000000000000000000000000000000000000610e8a565b15610b66576040517f9dcfa8c600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690639dcfa8c690622dc6c0906109d490879087908790600401611350565b610e2a847f4501f36a00000000000000000000000000000000000000000000000000000000610e8a565b15610b66576040517f0141a11700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851690630141a11790622dc6c0906109d490879087908790600401611350565b6000610e9583610f3a565b801561039657506103968383610f9e565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f5905073ffffffffffffffffffffffffffffffffffffffff8116610399576040517fc2f868f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610f66827f01ffc9a700000000000000000000000000000000000000000000000000000000610f9e565b80156103995750610f97827fffffffff00000000000000000000000000000000000000000000000000000000610f9e565b1592915050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000821660248201526000908190604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825192935060009283928392909183918a617530fa92503d91506000519050828015611075575060208210155b80156110815750600081115b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461081f57600080fd5b600080604083850312156110c157600080fd5b82356110cc8161108c565b915060208301356110dc8161108c565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff8211171561115a5761115a6110e7565b6040525050565b600082601f83011261117257600080fd5b813567ffffffffffffffff81111561118c5761118c6110e7565b6040516111c160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160182611116565b8181528460208386010111156111d657600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561120957600080fd5b84356112148161108c565b935060208501356112248161108c565b925060408501359150606085013567ffffffffffffffff81111561124757600080fd5b61125387828801611161565b91505092959194509250565b6000806040838503121561127257600080fd5b823561127d8161108c565b9150602083013567ffffffffffffffff81111561129957600080fd5b6112a585828601611161565b9150509250929050565b6000602082840312156112c157600080fd5b81356112cc8161108c565b9392505050565b6000602082840312156112e557600080fd5b5051919050565b6000815180845260005b81811015611312576020818501810151868301820152016112f6565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b73ffffffffffffffffffffffffffffffffffffffff8416815282602082015260606040820152600061138560608301846112ec565b95945050505050565b6000602082840312156113a057600080fd5b815180151581146112cc57600080fd5b600060033d11156113c95760046000803e5060005160e01c5b90565b600060443d10156113da5790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff816024840111818411171561142857505050505090565b82850191508151818111156114405750505050505090565b843d870101602082850101111561145a5750505050505090565b61146960208286010187611116565b509095945050505050565b60208152600061039660208301846112ec56fea164736f6c6343000817000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000043000000000000000000000000000000000000020000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd8000000000000000000000000002440427f615aa44ea7b3322df72189123f922c0a000000000000000000000000001ebb83cde40f8a5b2c3dbb585ae05ffc1fa7da
-----Decoded View---------------
Arg [0] : blast (address): 0x4300000000000000000000000000000000000002
Arg [1] : blastPoints (address): 0x2536FE9ab3F511540F2f9e2eC2A805005C3Dd800
Arg [2] : gasCollector (address): 0x2440427F615aa44ea7B3322DF72189123f922c0A
Arg [3] : pointsOperator (address): 0x001ebB83cDe40F8A5B2c3DbB585AE05fFC1Fa7DA
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000004300000000000000000000000000000000000002
Arg [1] : 0000000000000000000000002536fe9ab3f511540f2f9e2ec2a805005c3dd800
Arg [2] : 0000000000000000000000002440427f615aa44ea7b3322df72189123f922c0a
Arg [3] : 000000000000000000000000001ebb83cde40f8a5b2c3dbb585ae05ffc1fa7da
Deployed Bytecode Sourcemap
656:6228:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;870:46;;;;;;;;;;;;;;;;;;190:42:13;178:55;;;160:74;;148:2;133:18;870:46:6;;;;;;;;3392:250;;;;;;;;;;-1:-1:-1;3392:250:6;;;;;:::i;:::-;;:::i;808:56::-;;;;;;;;;;;;;;;760:42;;;;;;;;;;;;;;;3648:169;;;;;;;;;;-1:-1:-1;3648:169:6;;;;;:::i;:::-;;:::i;:::-;;;1195:25:13;;;1183:2;1168:18;3648:169:6;1049:177:13;2031:144:6;;;;;;;;;;-1:-1:-1;2031:144:6;;;;;:::i;:::-;;:::i;:::-;;2293:101:0;;;;;;;;;;;;;:::i;1638:85::-;;;;;;;;;;-1:-1:-1;1684:7:0;1710:6;;;1638:85;;1881:144:6;;;;;;;;;;-1:-1:-1;1881:144:6;;;;;:::i;:::-;;:::i;725:29::-;;;;;;;;;;;;;;;2836:498;;;;;;;;;;-1:-1:-1;2836:498:6;;;;;:::i;:::-;;:::i;2237:593::-;;;;;;:::i;:::-;;:::i;1170:49::-;;;;;;;;;;;;1210:9;1170:49;;2543:215:0;;;;;;;;;;-1:-1:-1;2543:215:0;;;;;:::i;:::-;;:::i;3392:250:6:-;3593:31;;4155:66:13;4250:2;4246:15;;;4242:24;;3593:31:6;;;4230:37:13;4301:15;;;4297:24;4283:12;;;4276:46;3476:7:6;;3502:133;;3550:31;;4338:12:13;;3593:31:6;;;;;;;;;;;;3583:42;;;;;;3502:34;:133::i;:::-;3495:140;;3392:250;;;;;:::o;3648:169::-;3739:7;3765:37;3788:7;3797:4;3765:22;:37::i;:::-;:45;;;;3648:169;-1:-1:-1;;;3648:169:6:o;2031:144::-;1531:13:0;:11;:13::i;:::-;2123:45:6::1;::::0;;;;:17:::1;4614:15:13::0;;;2123:45:6::1;::::0;::::1;4596:34:13::0;4666:15;;;4646:18;;;4639:43;2123:5:6::1;:17;::::0;::::1;::::0;4508:18:13;;2123:45:6::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2031:144:::0;;:::o;2293:101:0:-;1531:13;:11;:13::i;:::-;2357:30:::1;2384:1;2357:18;:30::i;:::-;2293:101::o:0;1881:144:6:-;1531:13:0;:11;:13::i;:::-;1973:45:6::1;::::0;;;;:17:::1;4614:15:13::0;;;1973:45:6::1;::::0;::::1;4596:34:13::0;4666:15;;;4646:18;;;4639:43;1973:5:6::1;:17;::::0;::::1;::::0;4508:18:13;;1973:45:6::1;4361:327:13::0;2836:498:6;2948:6;2958:1;2948:11;2944:63;;2982:14;;;;;;;;;;;;;;2944:63;3016:25;3044:43;3067:7;3076:10;3044:22;:43::i;:::-;3016:71;;3097:49;3112:7;3121:10;3133:6;3141:4;3097:14;:49::i;:::-;3156:58;;;;;:46;5090:55:13;;;3156:58:6;;;5072:74:13;5162:18;;;5155:34;;;3156:46:6;;;;;5045:18:13;;3156:58:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3224:48;3238:7;3247:10;3259:6;3267:4;3224:13;:48::i;:::-;3316:2;3287:40;;3304:10;3287:40;;3295:7;3287:40;;;3320:6;3287:40;;;;1195:25:13;;1183:2;1168:18;;1049:177;3287:40:6;;;;;;;;2934:400;2836:498;;;;:::o;2237:593::-;2319:9;2332:1;2319:14;2315:66;;2356:14;;;;;;;;;;;;;;2315:66;2390:25;2418:43;2441:7;2450:10;2418:22;:43::i;:::-;2390:71;-1:-1:-1;4065:20:6;;2471:105;;2522:43;2545:7;2554:10;2522:22;:43::i;:::-;2585:50;2598:7;2607:10;2619:9;2630:4;2585:12;:50::i;:::-;2664:17;2645:45;;;2699:9;2645:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2722:49;2734:7;2743:10;2755:9;2766:4;2722:11;:49::i;:::-;2786:37;;2813:9;1195:25:13;;2801:10:6;;2786:37;;;;;;1183:2:13;1168:18;2786:37:6;;;;;;;2305:525;2237:593;;:::o;2543:215:0:-;1531:13;:11;:13::i;:::-;2627:22:::1;::::0;::::1;2623:91;;2672:31;::::0;::::1;::::0;;2700:1:::1;2672:31;::::0;::::1;160:74:13::0;133:18;;2672:31:0::1;;;;;;;;2623:91;2723:28;2742:8;2723:18;:28::i;:::-;2543:215:::0;:::o;3930:227:1:-;3398:4;3392:11;4144:4;3432;3423:14;;3416:32;3484:34;3477:4;3468:14;;3461:58;-1:-1:-1;3539:14:1;;3532:38;;;3595:42;3583:55;;3667:4;3658:14;;3651:28;;;3741:4;3734;3725:14;;3715:31;3708:4;3699:14;;3692:55;3799:4;3792;3783:14;;;3773:31;4050:17;;4086:64;3140:680;1796:162:0;1684:7;1710:6;1855:23;1710:6;735:10:3;1855:23:0;1851:101;;1901:40;;;;;735:10:3;1901:40:0;;;160:74:13;133:18;;1901:40:0;14:226:13;2912:187:0;2985:16;3004:6;;;3020:17;;;;;;;;;;3052:40;;3004:6;;;;;;;3052:40;;2985:16;3052:40;2975:124;2912:187;:::o;5684:597:6:-;5797:74;5829:7;5838:32;5797:31;:74::i;:::-;5793:482;;;5891:79;;;;;:37;;;;;;1210:9;;5891:79;;5951:4;;5957:6;;5965:4;;5891:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5891:79:6;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;5887:378;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;6156:11;6160:6;6156:11;;;;;;:::i;:::-;;;;;;;;6099:83;5887:378;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6234:16;6243:6;6234:16;;;;;;:::i;5887:378::-;6017:7;6012:72;;6053:12;;;;;7949:2:13;7931:21;;;7988:1;7968:18;;;7961:29;8026:7;8021:2;8006:18;;7999:35;8066:2;8051:18;;7747:328;6053:12:6;;;;;;;;6012:72;5971:127;5887:378;5684:597;;;;:::o;6287:595::-;6399:74;6431:7;6440:32;6399:31;:74::i;:::-;6395:481;;;6493:78;;;;;:36;;;;;;1210:9;;6493:78;;6552:4;;6558:6;;6566:4;;6493:78;;;:::i;4132:350::-;4321:31;;4155:66:13;4250:2;4246:15;;;4242:24;;4321:31:6;;;4230:37:13;4301:15;;;4297:24;4283:12;;;4276:46;4214:23:6;;4252:102;;4278:31;;4338:12:13;;4321:31:6;;;;;;;;;;;;4311:42;;;;;;4252:25;:102::i;:::-;4364:111;;;;;:40;4413:5;8390:15:13;;4364:111:6;;;8372:34:13;4429:12:6;8442:15:13;;8422:18;;;8415:43;8494:15;;;8474:18;;;8467:43;4453:21:6;8546:15:13;;8526:18;;;8519:43;4214:140:6;;-1:-1:-1;4364:40:6;;;;;;8283:19:13;;4364:111:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4204:278;4132:350;;:::o;4488:593::-;4599:74;4631:7;4640:32;4599:31;:74::i;:::-;4595:480;;;4693:77;;;;;:35;;;;;;1210:9;;4693:77;;4751:4;;4757:6;;4765:4;;4693:77;;;:::i;5087:591::-;5197:74;5229:7;5238:32;5197:31;:74::i;:::-;5193:479;;;5291:76;;;;;:34;;;;;;1210:9;;5291:76;;5348:4;;5354:6;;5362:4;;5291:76;;;:::i;1363:282:4:-;1450:4;1557:23;1572:7;1557:14;:23::i;:::-;:81;;;;;1584:54;1617:7;1626:11;1584:32;:54::i;2209:821:1:-;2293:16;2625:48;2607:14;2601:4;2597:25;2591:4;2587:36;2584:90;2578:4;2571:104;2832:32;2815:14;2809:4;2805:25;2802:63;2796:4;2789:77;2914:4;2908;2902;2899:1;2891:28;2879:40;-1:-1:-1;2942:22:1;;;2938:86;;2987:26;;;;;;;;;;;;;;719:426:4;783:4;990:68;1023:7;1032:25;990:32;:68::i;:::-;:148;;;;-1:-1:-1;1075:63:4;1108:7;1117:20;1075:32;:63::i;:::-;1074:64;971:167;719:426;-1:-1:-1;;719:426:4:o;4397:632::-;4568:56;;8747:66:13;8735:79;;4568:56:4;;;8717:98:13;4499:4:4;;;;8690:18:13;;4568:56:4;;;;;;;;;;;;;;;;;;;;;;;;;4832:20;;4568:56;;-1:-1:-1;;;;;;;4568:56:4;;-1:-1:-1;;4797:7:4;4790:5;4779:86;4768:97;;4892:16;4878:30;;4942:4;4936:11;4921:26;;4974:7;:29;;;;;4999:4;4985:10;:18;;4974:29;:48;;;;;5021:1;5007:11;:15;4974:48;4967:55;4397:632;-1:-1:-1;;;;;;;4397:632:4:o;245:154:13:-;331:42;324:5;320:54;313:5;310:65;300:93;;389:1;386;379:12;404:388;472:6;480;533:2;521:9;512:7;508:23;504:32;501:52;;;549:1;546;539:12;501:52;588:9;575:23;607:31;632:5;607:31;:::i;:::-;657:5;-1:-1:-1;714:2:13;699:18;;686:32;727:33;686:32;727:33;:::i;:::-;779:7;769:17;;;404:388;;;;;:::o;1477:184::-;1529:77;1526:1;1519:88;1626:4;1623:1;1616:15;1650:4;1647:1;1640:15;1666:308;1772:66;1767:2;1761:4;1757:13;1753:86;1745:6;1741:99;1906:6;1894:10;1891:22;1870:18;1858:10;1855:34;1852:62;1849:88;;;1917:18;;:::i;:::-;1953:2;1946:22;-1:-1:-1;;1666:308:13:o;1979:614::-;2021:5;2074:3;2067:4;2059:6;2055:17;2051:27;2041:55;;2092:1;2089;2082:12;2041:55;2128:6;2115:20;2154:18;2150:2;2147:26;2144:52;;;2176:18;;:::i;:::-;2225:2;2219:9;2237:126;2357:4;2288:66;2281:4;2277:2;2273:13;2269:86;2265:97;2257:6;2237:126;:::i;:::-;2387:2;2379:6;2372:18;2433:3;2426:4;2421:2;2413:6;2409:15;2405:26;2402:35;2399:55;;;2450:1;2447;2440:12;2399:55;2514:2;2507:4;2499:6;2495:17;2488:4;2480:6;2476:17;2463:54;2561:1;2537:15;;;2554:4;2533:26;2526:37;;;;2541:6;1979:614;-1:-1:-1;;;1979:614:13:o;2598:673::-;2701:6;2709;2717;2725;2778:3;2766:9;2757:7;2753:23;2749:33;2746:53;;;2795:1;2792;2785:12;2746:53;2834:9;2821:23;2853:31;2878:5;2853:31;:::i;:::-;2903:5;-1:-1:-1;2960:2:13;2945:18;;2932:32;2973:33;2932:32;2973:33;:::i;:::-;3025:7;-1:-1:-1;3079:2:13;3064:18;;3051:32;;-1:-1:-1;3134:2:13;3119:18;;3106:32;3161:18;3150:30;;3147:50;;;3193:1;3190;3183:12;3147:50;3216:49;3257:7;3248:6;3237:9;3233:22;3216:49;:::i;:::-;3206:59;;;2598:673;;;;;;;:::o;3276:455::-;3353:6;3361;3414:2;3402:9;3393:7;3389:23;3385:32;3382:52;;;3430:1;3427;3420:12;3382:52;3469:9;3456:23;3488:31;3513:5;3488:31;:::i;:::-;3538:5;-1:-1:-1;3594:2:13;3579:18;;3566:32;3621:18;3610:30;;3607:50;;;3653:1;3650;3643:12;3607:50;3676:49;3717:7;3708:6;3697:9;3693:22;3676:49;:::i;:::-;3666:59;;;3276:455;;;;;:::o;3736:247::-;3795:6;3848:2;3836:9;3827:7;3823:23;3819:32;3816:52;;;3864:1;3861;3854:12;3816:52;3903:9;3890:23;3922:31;3947:5;3922:31;:::i;:::-;3972:5;3736:247;-1:-1:-1;;;3736:247:13:o;4693:184::-;4763:6;4816:2;4804:9;4795:7;4791:23;4787:32;4784:52;;;4832:1;4829;4822:12;4784:52;-1:-1:-1;4855:16:13;;4693:184;-1:-1:-1;4693:184:13:o;5200:481::-;5241:3;5279:5;5273:12;5306:6;5301:3;5294:19;5331:1;5341:162;5355:6;5352:1;5349:13;5341:162;;;5417:4;5473:13;;;5469:22;;5463:29;5445:11;;;5441:20;;5434:59;5370:12;5341:162;;;5345:3;5548:1;5541:4;5532:6;5527:3;5523:16;5519:27;5512:38;5670:4;5600:66;5595:2;5587:6;5583:15;5579:88;5574:3;5570:98;5566:109;5559:116;;;5200:481;;;;:::o;5686:408::-;5901:42;5893:6;5889:55;5878:9;5871:74;5981:6;5976:2;5965:9;5961:18;5954:34;6024:2;6019;6008:9;6004:18;5997:30;5852:4;6044:44;6084:2;6073:9;6069:18;6061:6;6044:44;:::i;:::-;6036:52;5686:408;-1:-1:-1;;;;;5686:408:13:o;6099:277::-;6166:6;6219:2;6207:9;6198:7;6194:23;6190:32;6187:52;;;6235:1;6232;6225:12;6187:52;6267:9;6261:16;6320:5;6313:13;6306:21;6299:5;6296:32;6286:60;;6342:1;6339;6332:12;6381:179;6416:3;6458:1;6440:16;6437:23;6434:120;;;6504:1;6501;6498;6483:23;-1:-1:-1;6541:1:13;6535:8;6530:3;6526:18;6434:120;6381:179;:::o;6565:731::-;6604:3;6646:4;6628:16;6625:26;6622:39;;;6565:731;:::o;6622:39::-;6688:2;6682:9;6710:66;6831:2;6813:16;6809:25;6806:1;6800:4;6785:50;6864:4;6858:11;6888:16;6923:18;6994:2;6987:4;6979:6;6975:17;6972:25;6967:2;6959:6;6956:14;6953:45;6950:58;;;7001:5;;;;;6565:731;:::o;6950:58::-;7038:6;7032:4;7028:17;7017:28;;7074:3;7068:10;7101:2;7093:6;7090:14;7087:27;;;7107:5;;;;;;6565:731;:::o;7087:27::-;7191:2;7172:16;7166:4;7162:27;7158:36;7151:4;7142:6;7137:3;7133:16;7129:27;7126:69;7123:82;;;7198:5;;;;;;6565:731;:::o;7123:82::-;7214:57;7265:4;7256:6;7248;7244:19;7240:30;7234:4;7214:57;:::i;:::-;-1:-1:-1;7287:3:13;;6565:731;-1:-1:-1;;;;;6565:731:13:o;7301:219::-;7450:2;7439:9;7432:21;7413:4;7470:44;7510:2;7499:9;7495:18;7487:6;7470:44;:::i
Swarm Source
none
Loading...
Loading
Loading...
Loading
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.