ETH Price: $1,981.30 (-5.11%)
Gas: 0.03 Gwei

Contract

0xc0B0151406c33674Cc7781D08440EBAf650fe965
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw149568852022-06-13 16:13:551362 days ago1655136835IN
0xc0B01514...f650fe965
0 ETH0.0030391398.95581266
Upgrade143932172022-03-15 20:07:411452 days ago1647374861IN
0xc0B01514...f650fe965
0.12 ETH0.0016071437.43980113
Upgrade143928152022-03-15 18:32:561452 days ago1647369176IN
0xc0B01514...f650fe965
0.29 ETH0.003134773.00546975
Upgrade143887022022-03-15 3:12:231452 days ago1647313943IN
0xc0B01514...f650fe965
0.08 ETH0.0011974227.87436826
Upgrade143885072022-03-15 2:29:141452 days ago1647311354IN
0xc0B01514...f650fe965
0.1 ETH0.001217124.2287698
Upgrade143865732022-03-14 19:18:071453 days ago1647285487IN
0xc0B01514...f650fe965
0.29 ETH0.0026876862.57709072
Upgrade143851342022-03-14 13:57:511453 days ago1647266271IN
0xc0B01514...f650fe965
0.29 ETH0.0007248816.87738719
Upgrade143696202022-03-12 3:41:351455 days ago1647056495IN
0xc0B01514...f650fe965
0.18 ETH0.0007399117.22411354
Upgrade143691922022-03-12 2:13:461455 days ago1647051226IN
0xc0B01514...f650fe965
0.29 ETH0.0013241730.83063565
Upgrade143628822022-03-11 2:28:221456 days ago1646965702IN
0xc0B01514...f650fe965
0.1 ETH0.0011881323.65205464
Upgrade143524002022-03-09 11:54:381458 days ago1646826878IN
0xc0B01514...f650fe965
0.29 ETH0.0009774722.74783289
Upgrade143492692022-03-09 0:06:031459 days ago1646784363IN
0xc0B01514...f650fe965
0.29 ETH0.00560231130.438
Upgrade143428392022-03-07 23:58:311460 days ago1646697511IN
0xc0B01514...f650fe965
0.29 ETH0.0025122458.46508325
Upgrade143416072022-03-07 19:26:301460 days ago1646681190IN
0xc0B01514...f650fe965
0.1 ETH0.0015101630.06980214
Upgrade143410722022-03-07 17:30:111460 days ago1646674211IN
0xc0B01514...f650fe965
0.29 ETH0.0018203142.39393939
Upgrade143410662022-03-07 17:29:041460 days ago1646674144IN
0xc0B01514...f650fe965
0.08 ETH0.0022855353.22870383
Upgrade143410582022-03-07 17:26:001460 days ago1646673960IN
0xc0B01514...f650fe965
0.08 ETH0.0019579945.56655181
Upgrade143405042022-03-07 15:25:291460 days ago1646666729IN
0xc0B01514...f650fe965
0.22 ETH0.0021695641.20652645
Upgrade143342202022-03-06 15:46:191461 days ago1646581579IN
0xc0B01514...f650fe965
0.29 ETH0.0013752332.01940915
Upgrade143316002022-03-06 5:54:331461 days ago1646546073IN
0xc0B01514...f650fe965
0.1 ETH0.0010916721.73700563
Upgrade143305672022-03-06 2:09:361461 days ago1646532576IN
0xc0B01514...f650fe965
0.29 ETH0.0011561526.9135525
Upgrade143300932022-03-06 0:26:411462 days ago1646526401IN
0xc0B01514...f650fe965
0.08 ETH0.0014839131.05408987
Upgrade143284402022-03-05 18:17:031462 days ago1646504223IN
0xc0B01514...f650fe965
0.58 ETH0.0017261737.30735465
Upgrade143275062022-03-05 14:50:171462 days ago1646491817IN
0xc0B01514...f650fe965
0.1 ETH0.0013150426.18464615
Upgrade143274912022-03-05 14:47:471462 days ago1646491667IN
0xc0B01514...f650fe965
0.18 ETH0.0011551226.8945622
View all transactions

Latest 2 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
-149568852022-06-13 16:13:551362 days ago1655136835
0xc0B01514...f650fe965
59.92 ETH
-139938422022-01-13 0:04:111514 days ago1642032251
0xc0B01514...f650fe965
0.03 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TikiCarving

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;

import './library/errors/Errors.sol';
import './library/ITiki.sol';
import './library/openzeppelin-alt/contracts-upgradeable/access/OwnableUpgradeable.sol';
import '@openzeppelin/contracts/utils/cryptography/ECDSA.sol';

contract TikiCarving is OwnableUpgradeable {

    address public txnSigner;
    bool public paused;

    struct contractState {
        address txnSigner;
        bool paused;
    }

    contractState public settings;

    event TokenUpgraded(uint indexed tokenID, uint indexed level, bytes32 indexed nonce);
    event TokenSacrificed(uint indexed tokenID, bytes32 indexed nonce);
    event UpgradeCompleted(bytes32 indexed nonce, address indexed operator, uint256[] tokenIDs, uint256 level);

    modifier whileUnpaused() {
        if (settings.paused) {
            revert Errors.Paused();
        }
        _;
    }

    function initialize() public initializer {
        __Ownable_init();
    }

    function setup(address signer) onlyOwner public {
        settings = contractState(
            signer,
            false
        );
    }

    function pause(bool _pause) external {
        settings.paused = _pause;
    }

    function deposit() public payable {}

    function withdraw() onlyOwner external {
        address payable recipient = payable(_msgSender());
        uint256 amount = address(this).balance;
        (bool success, ) = recipient.call{ value: amount }("");
        if ( ! success) {
            revert Errors.PaymentFailed(amount);
        }
    }

    function upgrade(uint256[] memory upgradeIDs, uint256[] memory sacrificeIDs, uint256 level, uint256 method, uint256 cost, bytes32 nonce, bytes memory signature) whileUnpaused external payable {
        address operator = _msgSender();
        if ( msg.value != cost) revert Errors.InsufficientBalance(msg.value, cost);
        if ( ! verifySignature(signature, getHash(getDigest(_msgSender(), upgradeIDs, sacrificeIDs, level, method, cost, nonce)))) {
            revert Errors.InvalidSignature();
        }

        for (uint i; i < upgradeIDs.length; i++) {
            emit TokenUpgraded(upgradeIDs[ i ], level, nonce);
        }

        for (uint i; i < sacrificeIDs.length; i++) {
            emit TokenSacrificed(sacrificeIDs[ i ], nonce);
        }

        emit UpgradeCompleted(nonce, operator, upgradeIDs, level);
    }

    function verifySignature(bytes memory signature, bytes32 digestHash) public view returns(bool) {
        return settings.txnSigner == getSigner(signature, digestHash);
    }

    function getSigner(bytes memory signature, bytes32 digestHash) public pure returns(address) {
        bytes32 ethSignedHash = ECDSA.toEthSignedMessageHash(digestHash);
        return ECDSA.recover(ethSignedHash, signature);
    }

    function getHash(bytes memory digest) public pure returns (bytes32 hash) {
        return keccak256(digest);
    }

    function getDigest(address wallet, uint256[] memory upgradeIDs, uint256[] memory sacrificeIDs, uint256 level, uint256 method, uint256 cost, bytes32 nonce) public pure returns (bytes memory) {
        return abi.encodePacked(
            wallet,
            getHash(abi.encodePacked(upgradeIDs)),
            getHash(abi.encodePacked(sacrificeIDs)),
            level,
            method,
            cost,
            nonce
        );
    }
}

// SPDX-License-Identifier: MIT

pragma solidity >=0.8.0 <0.9.0;
import "../proxy/utils/Initializable.sol";

/**
 * @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 ContextUpgradeable is Initializable {
    function __Context_init() internal initializer {
        __Context_init_unchained();
    }

    function __Context_init_unchained() internal initializer {
    }
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
    uint256[50] private __gap;
}

File 3 of 8 : Initializable.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.8.4 <0.9.0;

import "../../../../errors/Errors.sol";

/**
 * @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 a proxied contract can't have 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.
 *
 * 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.
 */
abstract contract Initializable {
    /**
     * @dev Indicates that the contract has been initialized.
     */
    bool private _initialized;

    /**
     * @dev Indicates that the contract is in the process of being initialized.
     */
    bool private _initializing;

    /**
     * @dev Modifier to protect an initializer function from being invoked twice.
     */
    modifier initializer() {
        // require(_initializing || !_initialized, "Initializable: contract is already initialized");
        if (!_initializing && _initialized) revert Errors.NotInitialized();

        bool isTopLevelCall = !_initializing;
        if (isTopLevelCall) {
            _initializing = true;
            _initialized = true;
        }

        _;

        if (isTopLevelCall) {
            _initializing = false;
        }
    }
}

// SPDX-License-Identifier: MIT

pragma solidity >=0.8.4 <0.9.0;

import "../utils/ContextUpgradeable.sol";
import "../proxy/utils/Initializable.sol";

import "../../../errors/Errors.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.
 *
 * By default, the owner account will be the one that deploys the contract. 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 OwnableUpgradeable is Initializable, ContextUpgradeable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    function __Ownable_init() internal initializer {
        __Context_init_unchained();
        __Ownable_init_unchained();
    }

    function __Ownable_init_unchained() internal initializer {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        // require(owner() == _msgSender(), "Ownable: caller is not the owner");
        if (owner() != _msgSender()) revert Errors.UserPermissions();
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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 {
        // require(newOwner != address(0), "Ownable: new owner is the zero address");
        if (newOwner == address(0)) revert Errors.AddressTarget(newOwner);
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
    uint256[49] private __gap;
}

File 5 of 8 : Errors.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity >=0.8.4 <0.9.0;

library Errors {
    error DuplicateTransaction(bytes32 nonce);
    error TokensUnavailable();
    error AlreadyUpgraded(uint256 tokenID);
    error AlreadySacrificed(uint256 tokenID);
    error AttemptingToUpgradeSacrificedToken(uint256 tokenID);
    error UnownedToken(uint256 tokenID);
    error InvalidSignature();

    error UserPermissions();
    error AddressTarget(address target);
    error NotInitialized();
    error InsufficientBalance(uint256 available, uint256 required);
    error NotAContract();
    error UnsignedOverflow(uint256 value);
    error OutOfRange(uint256 value);
    error PaymentFailed(uint256 amount);
    error Paused();
}

// SPDX-License-Identifier: UNLICENSED

pragma solidity >=0.8.4 <0.9.0;

interface ITiki {
    function ownerOf(uint256 tokenID) external view returns(address);
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/cryptography/ECDSA.sol)

pragma solidity ^0.8.0;

import "../Strings.sol";

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature` or error string. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     *
     * _Available since v4.3._
     */
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s;
        uint8 v;
        assembly {
            s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
            v := add(shr(255, vs), 27)
        }
        return tryRecover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     *
     * _Available since v4.2._
     */
    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from `s`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s));
    }

    /**
     * @dev Returns an Ethereum Signed Typed Data, created from a
     * `domainSeparator` and a `structHash`. This produces hash corresponding
     * to the one signed with the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
     * JSON-RPC method as part of EIP-712.
     *
     * See {recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "evmVersion": "london",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressTarget","type":"error"},{"inputs":[{"internalType":"uint256","name":"available","type":"uint256"},{"internalType":"uint256","name":"required","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"NotInitialized","type":"error"},{"inputs":[],"name":"Paused","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentFailed","type":"error"},{"inputs":[],"name":"UserPermissions","type":"error"},{"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":"uint256","name":"tokenID","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"nonce","type":"bytes32"}],"name":"TokenSacrificed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenID","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"level","type":"uint256"},{"indexed":true,"internalType":"bytes32","name":"nonce","type":"bytes32"}],"name":"TokenUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"nonce","type":"bytes32"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIDs","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"level","type":"uint256"}],"name":"UpgradeCompleted","type":"event"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256[]","name":"upgradeIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"sacrificeIDs","type":"uint256[]"},{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"method","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bytes32","name":"nonce","type":"bytes32"}],"name":"getDigest","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"digest","type":"bytes"}],"name":"getHash","outputs":[{"internalType":"bytes32","name":"hash","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes32","name":"digestHash","type":"bytes32"}],"name":"getSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"settings","outputs":[{"internalType":"address","name":"txnSigner","type":"address"},{"internalType":"bool","name":"paused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"setup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txnSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"upgradeIDs","type":"uint256[]"},{"internalType":"uint256[]","name":"sacrificeIDs","type":"uint256[]"},{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint256","name":"method","type":"uint256"},{"internalType":"uint256","name":"cost","type":"uint256"},{"internalType":"bytes32","name":"nonce","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"upgrade","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes32","name":"digestHash","type":"bytes32"}],"name":"verifySignature","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506121fd806100206000396000f3fe6080604052600436106100f35760003560e01c80638129fc1c1161008a578063e06174e411610059578063e06174e4146102b0578063e1989326146102dc578063f2fde38b14610319578063f72bd36814610342576100f3565b80638129fc1c146102275780638da5cb5b1461023e578063b00140aa14610269578063d0e30db0146102a6576100f3565b80635c975abb116100c65780635c975abb1461017f57806366d38203146101aa5780636bd6c43d146101d3578063715018a614610210576100f3565b806302329a29146100f85780631bc989d3146101215780632d4eb74f1461013d5780633ccfd60b14610168575b600080fd5b34801561010457600080fd5b5061011f600480360381019061011a91906113d5565b61037f565b005b61013b6004803603810190610136919061167c565b61039f565b005b34801561014957600080fd5b506101526105c4565b60405161015f91906117b3565b60405180910390f35b34801561017457600080fd5b5061017d6105ea565b005b34801561018b57600080fd5b50610194610721565b6040516101a191906117dd565b60405180910390f35b3480156101b657600080fd5b506101d160048036038101906101cc9190611824565b610734565b005b3480156101df57600080fd5b506101fa60048036038101906101f59190611851565b610844565b60405161020791906119b3565b60405180910390f35b34801561021c57600080fd5b506102256108cd565b005b34801561023357600080fd5b5061023c61094c565b005b34801561024a57600080fd5b50610253610a26565b60405161026091906117b3565b60405180910390f35b34801561027557600080fd5b50610290600480360381019061028b91906119d5565b610a50565b60405161029d9190611a2d565b60405180910390f35b6102ae610a61565b005b3480156102bc57600080fd5b506102c5610a63565b6040516102d3929190611a48565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe9190611a71565b610aa2565b60405161031091906117dd565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b9190611824565b610b09565b005b34801561034e57600080fd5b5061036960048036038101906103649190611a71565b610bfa565b60405161037691906117b3565b60405180910390f35b80606660000160146101000a81548160ff02191690831515021790555050565b606660000160149054906101000a900460ff16156103e9576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006103f3610c1b565b905083341461043b5734846040517fcf479181000000000000000000000000000000000000000000000000000000008152600401610432929190611adc565b60405180910390fd5b6104628261045d61045861044d610c1b565b8c8c8c8c8c8c610844565b610a50565b610aa2565b610498576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b88518110156105005783878a83815181106104b9576104b8611b05565b5b60200260200101517f608ecc3fa6e6fb6623282b14831bcfcb2468c174a6598dd1e89ff2d530f574b960405160405180910390a480806104f890611b63565b91505061049b565b5060005b8751811015610568578388828151811061052157610520611b05565b5b60200260200101517fdd7429ab0ff6c3965d356599522919dd02abe7a09a52e0577f97d2b110ded06560405160405180910390a3808061056090611b63565b915050610504565b508073ffffffffffffffffffffffffffffffffffffffff16837f6c47b9dad8a5eb84178470c2ef451478d363a3e037a3acf502e6e49d1a3d96498a896040516105b2929190611c6a565b60405180910390a35050505050505050565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6105f2610c1b565b73ffffffffffffffffffffffffffffffffffffffff16610610610a26565b73ffffffffffffffffffffffffffffffffffffffff161461065d576040517fcb5b8a6e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610667610c1b565b9050600047905060008273ffffffffffffffffffffffffffffffffffffffff168260405161069490611ccb565b60006040518083038185875af1925050503d80600081146106d1576040519150601f19603f3d011682016040523d82523d6000602084013e6106d6565b606091505b505090508061071c57816040517f1e67017f0000000000000000000000000000000000000000000000000000000081526004016107139190611ce0565b60405180910390fd5b505050565b606560149054906101000a900460ff1681565b61073c610c1b565b73ffffffffffffffffffffffffffffffffffffffff1661075a610a26565b73ffffffffffffffffffffffffffffffffffffffff16146107a7576040517fcb5b8a6e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052808273ffffffffffffffffffffffffffffffffffffffff16815260200160001515815250606660008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690831515021790555090505050565b60608761086f8860405160200161085b9190611d8b565b604051602081830303815290604052610a50565b610897886040516020016108839190611d8b565b604051602081830303815290604052610a50565b878787876040516020016108b19796959493929190611e2c565b6040516020818303038152906040529050979650505050505050565b6108d5610c1b565b73ffffffffffffffffffffffffffffffffffffffff166108f3610a26565b73ffffffffffffffffffffffffffffffffffffffff1614610940576040517fcb5b8a6e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094a6000610c23565b565b600060019054906101000a900460ff16158015610973575060008054906101000a900460ff165b156109aa576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900460ff1615905080156109fa576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b610a02610ce9565b8015610a235760008060016101000a81548160ff0219169083151502179055505b50565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081805190602001209050919050565b565b60668060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460ff16905082565b6000610aae8383610bfa565b73ffffffffffffffffffffffffffffffffffffffff16606660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b610b11610c1b565b73ffffffffffffffffffffffffffffffffffffffff16610b2f610a26565b73ffffffffffffffffffffffffffffffffffffffff1614610b7c576040517fcb5b8a6e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bee57806040517fa4894579000000000000000000000000000000000000000000000000000000008152600401610be591906117b3565b60405180910390fd5b610bf781610c23565b50565b600080610c0683610dcb565b9050610c128185610dfb565b91505092915050565b600033905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060019054906101000a900460ff16158015610d10575060008054906101000a900460ff165b15610d47576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900460ff161590508015610d97576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b610d9f610e22565b610da7610ef4565b8015610dc85760008060016101000a81548160ff0219169083151502179055505b50565b600081604051602001610dde9190611f04565b604051602081830303815290604052805190602001209050919050565b6000806000610e0a8585610fd6565b91509150610e1781611059565b819250505092915050565b600060019054906101000a900460ff16158015610e49575060008054906101000a900460ff165b15610e80576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900460ff161590508015610ed0576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015610ef15760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16158015610f1b575060008054906101000a900460ff165b15610f52576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900460ff161590508015610fa2576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b610fb2610fad610c1b565b610c23565b8015610fd35760008060016101000a81548160ff0219169083151502179055505b50565b6000806041835114156110185760008060006020860151925060408601519150606086015160001a905061100c8782858561122e565b94509450505050611052565b60408351141561104957600080602085015191506040850151905061103e86838361133b565b935093505050611052565b60006002915091505b9250929050565b6000600481111561106d5761106c611f2a565b5b8160048111156110805761107f611f2a565b5b141561108b5761122b565b6001600481111561109f5761109e611f2a565b5b8160048111156110b2576110b1611f2a565b5b14156110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90611fb6565b60405180910390fd5b6002600481111561110757611106611f2a565b5b81600481111561111a57611119611f2a565b5b141561115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290612022565b60405180910390fd5b6003600481111561116f5761116e611f2a565b5b81600481111561118257611181611f2a565b5b14156111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba906120b4565b60405180910390fd5b6004808111156111d6576111d5611f2a565b5b8160048111156111e9576111e8611f2a565b5b141561122a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122190612146565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611269576000600391509150611332565b601b8560ff16141580156112815750601c8560ff1614155b15611293576000600491509150611332565b6000600187878787604051600081526020016040526040516112b89493929190612182565b6020604051602081039080840390855afa1580156112da573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561132957600060019250925050611332565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c01905061137b8782888561122e565b935093505050935093915050565b6000604051905090565b600080fd5b600080fd5b60008115159050919050565b6113b28161139d565b81146113bd57600080fd5b50565b6000813590506113cf816113a9565b92915050565b6000602082840312156113eb576113ea611393565b5b60006113f9848285016113c0565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61145082611407565b810181811067ffffffffffffffff8211171561146f5761146e611418565b5b80604052505050565b6000611482611389565b905061148e8282611447565b919050565b600067ffffffffffffffff8211156114ae576114ad611418565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b6114d7816114c4565b81146114e257600080fd5b50565b6000813590506114f4816114ce565b92915050565b600061150d61150884611493565b611478565b905080838252602082019050602084028301858111156115305761152f6114bf565b5b835b81811015611559578061154588826114e5565b845260208401935050602081019050611532565b5050509392505050565b600082601f83011261157857611577611402565b5b81356115888482602086016114fa565b91505092915050565b6000819050919050565b6115a481611591565b81146115af57600080fd5b50565b6000813590506115c18161159b565b92915050565b600080fd5b600067ffffffffffffffff8211156115e7576115e6611418565b5b6115f082611407565b9050602081019050919050565b82818337600083830152505050565b600061161f61161a846115cc565b611478565b90508281526020810184848401111561163b5761163a6115c7565b5b6116468482856115fd565b509392505050565b600082601f83011261166357611662611402565b5b813561167384826020860161160c565b91505092915050565b600080600080600080600060e0888a03121561169b5761169a611393565b5b600088013567ffffffffffffffff8111156116b9576116b8611398565b5b6116c58a828b01611563565b975050602088013567ffffffffffffffff8111156116e6576116e5611398565b5b6116f28a828b01611563565b96505060406117038a828b016114e5565b95505060606117148a828b016114e5565b94505060806117258a828b016114e5565b93505060a06117368a828b016115b2565b92505060c088013567ffffffffffffffff81111561175757611756611398565b5b6117638a828b0161164e565b91505092959891949750929550565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061179d82611772565b9050919050565b6117ad81611792565b82525050565b60006020820190506117c860008301846117a4565b92915050565b6117d78161139d565b82525050565b60006020820190506117f260008301846117ce565b92915050565b61180181611792565b811461180c57600080fd5b50565b60008135905061181e816117f8565b92915050565b60006020828403121561183a57611839611393565b5b60006118488482850161180f565b91505092915050565b600080600080600080600060e0888a0312156118705761186f611393565b5b600061187e8a828b0161180f565b975050602088013567ffffffffffffffff81111561189f5761189e611398565b5b6118ab8a828b01611563565b965050604088013567ffffffffffffffff8111156118cc576118cb611398565b5b6118d88a828b01611563565b95505060606118e98a828b016114e5565b94505060806118fa8a828b016114e5565b93505060a061190b8a828b016114e5565b92505060c061191c8a828b016115b2565b91505092959891949750929550565b600081519050919050565b600082825260208201905092915050565b60005b8381101561196557808201518184015260208101905061194a565b83811115611974576000848401525b50505050565b60006119858261192b565b61198f8185611936565b935061199f818560208601611947565b6119a881611407565b840191505092915050565b600060208201905081810360008301526119cd818461197a565b905092915050565b6000602082840312156119eb576119ea611393565b5b600082013567ffffffffffffffff811115611a0957611a08611398565b5b611a158482850161164e565b91505092915050565b611a2781611591565b82525050565b6000602082019050611a426000830184611a1e565b92915050565b6000604082019050611a5d60008301856117a4565b611a6a60208301846117ce565b9392505050565b60008060408385031215611a8857611a87611393565b5b600083013567ffffffffffffffff811115611aa657611aa5611398565b5b611ab28582860161164e565b9250506020611ac3858286016115b2565b9150509250929050565b611ad6816114c4565b82525050565b6000604082019050611af16000830185611acd565b611afe6020830184611acd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b6e826114c4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611ba157611ba0611b34565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611be1816114c4565b82525050565b6000611bf38383611bd8565b60208301905092915050565b6000602082019050919050565b6000611c1782611bac565b611c218185611bb7565b9350611c2c83611bc8565b8060005b83811015611c5d578151611c448882611be7565b9750611c4f83611bff565b925050600181019050611c30565b5085935050505092915050565b60006040820190508181036000830152611c848185611c0c565b9050611c936020830184611acd565b9392505050565b600081905092915050565b50565b6000611cb5600083611c9a565b9150611cc082611ca5565b600082019050919050565b6000611cd682611ca8565b9150819050919050565b6000602082019050611cf56000830184611acd565b92915050565b600081905092915050565b611d0f816114c4565b82525050565b6000611d218383611d06565b60208301905092915050565b6000611d3882611bac565b611d428185611cfb565b9350611d4d83611bc8565b8060005b83811015611d7e578151611d658882611d15565b9750611d7083611bff565b925050600181019050611d51565b5085935050505092915050565b6000611d978284611d2d565b915081905092915050565b60008160601b9050919050565b6000611dba82611da2565b9050919050565b6000611dcc82611daf565b9050919050565b611de4611ddf82611792565b611dc1565b82525050565b6000819050919050565b611e05611e0082611591565b611dea565b82525050565b6000819050919050565b611e26611e21826114c4565b611e0b565b82525050565b6000611e38828a611dd3565b601482019150611e488289611df4565b602082019150611e588288611df4565b602082019150611e688287611e15565b602082019150611e788286611e15565b602082019150611e888285611e15565b602082019150611e988284611df4565b60208201915081905098975050505050505050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000611eee601c83611ead565b9150611ef982611eb8565b601c82019050919050565b6000611f0f82611ee1565b9150611f1b8284611df4565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600082825260208201905092915050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611fa0601883611f59565b9150611fab82611f6a565b602082019050919050565b60006020820190508181036000830152611fcf81611f93565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b600061200c601f83611f59565b915061201782611fd6565b602082019050919050565b6000602082019050818103600083015261203b81611fff565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b600061209e602283611f59565b91506120a982612042565b604082019050919050565b600060208201905081810360008301526120cd81612091565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612130602283611f59565b915061213b826120d4565b604082019050919050565b6000602082019050818103600083015261215f81612123565b9050919050565b600060ff82169050919050565b61217c81612166565b82525050565b60006080820190506121976000830187611a1e565b6121a46020830186612173565b6121b16040830185611a1e565b6121be6060830184611a1e565b9594505050505056fea2646970667358221220e38df47a2cc13bc55f4342c8ee5a6455e7fb8527be6fdebb7726a2551e7d8ddf64736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106100f35760003560e01c80638129fc1c1161008a578063e06174e411610059578063e06174e4146102b0578063e1989326146102dc578063f2fde38b14610319578063f72bd36814610342576100f3565b80638129fc1c146102275780638da5cb5b1461023e578063b00140aa14610269578063d0e30db0146102a6576100f3565b80635c975abb116100c65780635c975abb1461017f57806366d38203146101aa5780636bd6c43d146101d3578063715018a614610210576100f3565b806302329a29146100f85780631bc989d3146101215780632d4eb74f1461013d5780633ccfd60b14610168575b600080fd5b34801561010457600080fd5b5061011f600480360381019061011a91906113d5565b61037f565b005b61013b6004803603810190610136919061167c565b61039f565b005b34801561014957600080fd5b506101526105c4565b60405161015f91906117b3565b60405180910390f35b34801561017457600080fd5b5061017d6105ea565b005b34801561018b57600080fd5b50610194610721565b6040516101a191906117dd565b60405180910390f35b3480156101b657600080fd5b506101d160048036038101906101cc9190611824565b610734565b005b3480156101df57600080fd5b506101fa60048036038101906101f59190611851565b610844565b60405161020791906119b3565b60405180910390f35b34801561021c57600080fd5b506102256108cd565b005b34801561023357600080fd5b5061023c61094c565b005b34801561024a57600080fd5b50610253610a26565b60405161026091906117b3565b60405180910390f35b34801561027557600080fd5b50610290600480360381019061028b91906119d5565b610a50565b60405161029d9190611a2d565b60405180910390f35b6102ae610a61565b005b3480156102bc57600080fd5b506102c5610a63565b6040516102d3929190611a48565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe9190611a71565b610aa2565b60405161031091906117dd565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b9190611824565b610b09565b005b34801561034e57600080fd5b5061036960048036038101906103649190611a71565b610bfa565b60405161037691906117b3565b60405180910390f35b80606660000160146101000a81548160ff02191690831515021790555050565b606660000160149054906101000a900460ff16156103e9576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006103f3610c1b565b905083341461043b5734846040517fcf479181000000000000000000000000000000000000000000000000000000008152600401610432929190611adc565b60405180910390fd5b6104628261045d61045861044d610c1b565b8c8c8c8c8c8c610844565b610a50565b610aa2565b610498576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b88518110156105005783878a83815181106104b9576104b8611b05565b5b60200260200101517f608ecc3fa6e6fb6623282b14831bcfcb2468c174a6598dd1e89ff2d530f574b960405160405180910390a480806104f890611b63565b91505061049b565b5060005b8751811015610568578388828151811061052157610520611b05565b5b60200260200101517fdd7429ab0ff6c3965d356599522919dd02abe7a09a52e0577f97d2b110ded06560405160405180910390a3808061056090611b63565b915050610504565b508073ffffffffffffffffffffffffffffffffffffffff16837f6c47b9dad8a5eb84178470c2ef451478d363a3e037a3acf502e6e49d1a3d96498a896040516105b2929190611c6a565b60405180910390a35050505050505050565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6105f2610c1b565b73ffffffffffffffffffffffffffffffffffffffff16610610610a26565b73ffffffffffffffffffffffffffffffffffffffff161461065d576040517fcb5b8a6e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610667610c1b565b9050600047905060008273ffffffffffffffffffffffffffffffffffffffff168260405161069490611ccb565b60006040518083038185875af1925050503d80600081146106d1576040519150601f19603f3d011682016040523d82523d6000602084013e6106d6565b606091505b505090508061071c57816040517f1e67017f0000000000000000000000000000000000000000000000000000000081526004016107139190611ce0565b60405180910390fd5b505050565b606560149054906101000a900460ff1681565b61073c610c1b565b73ffffffffffffffffffffffffffffffffffffffff1661075a610a26565b73ffffffffffffffffffffffffffffffffffffffff16146107a7576040517fcb5b8a6e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052808273ffffffffffffffffffffffffffffffffffffffff16815260200160001515815250606660008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548160ff02191690831515021790555090505050565b60608761086f8860405160200161085b9190611d8b565b604051602081830303815290604052610a50565b610897886040516020016108839190611d8b565b604051602081830303815290604052610a50565b878787876040516020016108b19796959493929190611e2c565b6040516020818303038152906040529050979650505050505050565b6108d5610c1b565b73ffffffffffffffffffffffffffffffffffffffff166108f3610a26565b73ffffffffffffffffffffffffffffffffffffffff1614610940576040517fcb5b8a6e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094a6000610c23565b565b600060019054906101000a900460ff16158015610973575060008054906101000a900460ff165b156109aa576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900460ff1615905080156109fa576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b610a02610ce9565b8015610a235760008060016101000a81548160ff0219169083151502179055505b50565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081805190602001209050919050565b565b60668060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460ff16905082565b6000610aae8383610bfa565b73ffffffffffffffffffffffffffffffffffffffff16606660000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b610b11610c1b565b73ffffffffffffffffffffffffffffffffffffffff16610b2f610a26565b73ffffffffffffffffffffffffffffffffffffffff1614610b7c576040517fcb5b8a6e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bee57806040517fa4894579000000000000000000000000000000000000000000000000000000008152600401610be591906117b3565b60405180910390fd5b610bf781610c23565b50565b600080610c0683610dcb565b9050610c128185610dfb565b91505092915050565b600033905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060019054906101000a900460ff16158015610d10575060008054906101000a900460ff165b15610d47576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900460ff161590508015610d97576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b610d9f610e22565b610da7610ef4565b8015610dc85760008060016101000a81548160ff0219169083151502179055505b50565b600081604051602001610dde9190611f04565b604051602081830303815290604052805190602001209050919050565b6000806000610e0a8585610fd6565b91509150610e1781611059565b819250505092915050565b600060019054906101000a900460ff16158015610e49575060008054906101000a900460ff165b15610e80576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900460ff161590508015610ed0576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015610ef15760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16158015610f1b575060008054906101000a900460ff165b15610f52576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060019054906101000a900460ff161590508015610fa2576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b610fb2610fad610c1b565b610c23565b8015610fd35760008060016101000a81548160ff0219169083151502179055505b50565b6000806041835114156110185760008060006020860151925060408601519150606086015160001a905061100c8782858561122e565b94509450505050611052565b60408351141561104957600080602085015191506040850151905061103e86838361133b565b935093505050611052565b60006002915091505b9250929050565b6000600481111561106d5761106c611f2a565b5b8160048111156110805761107f611f2a565b5b141561108b5761122b565b6001600481111561109f5761109e611f2a565b5b8160048111156110b2576110b1611f2a565b5b14156110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90611fb6565b60405180910390fd5b6002600481111561110757611106611f2a565b5b81600481111561111a57611119611f2a565b5b141561115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290612022565b60405180910390fd5b6003600481111561116f5761116e611f2a565b5b81600481111561118257611181611f2a565b5b14156111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba906120b4565b60405180910390fd5b6004808111156111d6576111d5611f2a565b5b8160048111156111e9576111e8611f2a565b5b141561122a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122190612146565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611269576000600391509150611332565b601b8560ff16141580156112815750601c8560ff1614155b15611293576000600491509150611332565b6000600187878787604051600081526020016040526040516112b89493929190612182565b6020604051602081039080840390855afa1580156112da573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561132957600060019250925050611332565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c01905061137b8782888561122e565b935093505050935093915050565b6000604051905090565b600080fd5b600080fd5b60008115159050919050565b6113b28161139d565b81146113bd57600080fd5b50565b6000813590506113cf816113a9565b92915050565b6000602082840312156113eb576113ea611393565b5b60006113f9848285016113c0565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61145082611407565b810181811067ffffffffffffffff8211171561146f5761146e611418565b5b80604052505050565b6000611482611389565b905061148e8282611447565b919050565b600067ffffffffffffffff8211156114ae576114ad611418565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b6114d7816114c4565b81146114e257600080fd5b50565b6000813590506114f4816114ce565b92915050565b600061150d61150884611493565b611478565b905080838252602082019050602084028301858111156115305761152f6114bf565b5b835b81811015611559578061154588826114e5565b845260208401935050602081019050611532565b5050509392505050565b600082601f83011261157857611577611402565b5b81356115888482602086016114fa565b91505092915050565b6000819050919050565b6115a481611591565b81146115af57600080fd5b50565b6000813590506115c18161159b565b92915050565b600080fd5b600067ffffffffffffffff8211156115e7576115e6611418565b5b6115f082611407565b9050602081019050919050565b82818337600083830152505050565b600061161f61161a846115cc565b611478565b90508281526020810184848401111561163b5761163a6115c7565b5b6116468482856115fd565b509392505050565b600082601f83011261166357611662611402565b5b813561167384826020860161160c565b91505092915050565b600080600080600080600060e0888a03121561169b5761169a611393565b5b600088013567ffffffffffffffff8111156116b9576116b8611398565b5b6116c58a828b01611563565b975050602088013567ffffffffffffffff8111156116e6576116e5611398565b5b6116f28a828b01611563565b96505060406117038a828b016114e5565b95505060606117148a828b016114e5565b94505060806117258a828b016114e5565b93505060a06117368a828b016115b2565b92505060c088013567ffffffffffffffff81111561175757611756611398565b5b6117638a828b0161164e565b91505092959891949750929550565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061179d82611772565b9050919050565b6117ad81611792565b82525050565b60006020820190506117c860008301846117a4565b92915050565b6117d78161139d565b82525050565b60006020820190506117f260008301846117ce565b92915050565b61180181611792565b811461180c57600080fd5b50565b60008135905061181e816117f8565b92915050565b60006020828403121561183a57611839611393565b5b60006118488482850161180f565b91505092915050565b600080600080600080600060e0888a0312156118705761186f611393565b5b600061187e8a828b0161180f565b975050602088013567ffffffffffffffff81111561189f5761189e611398565b5b6118ab8a828b01611563565b965050604088013567ffffffffffffffff8111156118cc576118cb611398565b5b6118d88a828b01611563565b95505060606118e98a828b016114e5565b94505060806118fa8a828b016114e5565b93505060a061190b8a828b016114e5565b92505060c061191c8a828b016115b2565b91505092959891949750929550565b600081519050919050565b600082825260208201905092915050565b60005b8381101561196557808201518184015260208101905061194a565b83811115611974576000848401525b50505050565b60006119858261192b565b61198f8185611936565b935061199f818560208601611947565b6119a881611407565b840191505092915050565b600060208201905081810360008301526119cd818461197a565b905092915050565b6000602082840312156119eb576119ea611393565b5b600082013567ffffffffffffffff811115611a0957611a08611398565b5b611a158482850161164e565b91505092915050565b611a2781611591565b82525050565b6000602082019050611a426000830184611a1e565b92915050565b6000604082019050611a5d60008301856117a4565b611a6a60208301846117ce565b9392505050565b60008060408385031215611a8857611a87611393565b5b600083013567ffffffffffffffff811115611aa657611aa5611398565b5b611ab28582860161164e565b9250506020611ac3858286016115b2565b9150509250929050565b611ad6816114c4565b82525050565b6000604082019050611af16000830185611acd565b611afe6020830184611acd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b6e826114c4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611ba157611ba0611b34565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611be1816114c4565b82525050565b6000611bf38383611bd8565b60208301905092915050565b6000602082019050919050565b6000611c1782611bac565b611c218185611bb7565b9350611c2c83611bc8565b8060005b83811015611c5d578151611c448882611be7565b9750611c4f83611bff565b925050600181019050611c30565b5085935050505092915050565b60006040820190508181036000830152611c848185611c0c565b9050611c936020830184611acd565b9392505050565b600081905092915050565b50565b6000611cb5600083611c9a565b9150611cc082611ca5565b600082019050919050565b6000611cd682611ca8565b9150819050919050565b6000602082019050611cf56000830184611acd565b92915050565b600081905092915050565b611d0f816114c4565b82525050565b6000611d218383611d06565b60208301905092915050565b6000611d3882611bac565b611d428185611cfb565b9350611d4d83611bc8565b8060005b83811015611d7e578151611d658882611d15565b9750611d7083611bff565b925050600181019050611d51565b5085935050505092915050565b6000611d978284611d2d565b915081905092915050565b60008160601b9050919050565b6000611dba82611da2565b9050919050565b6000611dcc82611daf565b9050919050565b611de4611ddf82611792565b611dc1565b82525050565b6000819050919050565b611e05611e0082611591565b611dea565b82525050565b6000819050919050565b611e26611e21826114c4565b611e0b565b82525050565b6000611e38828a611dd3565b601482019150611e488289611df4565b602082019150611e588288611df4565b602082019150611e688287611e15565b602082019150611e788286611e15565b602082019150611e888285611e15565b602082019150611e988284611df4565b60208201915081905098975050505050505050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000611eee601c83611ead565b9150611ef982611eb8565b601c82019050919050565b6000611f0f82611ee1565b9150611f1b8284611df4565b60208201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600082825260208201905092915050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000611fa0601883611f59565b9150611fab82611f6a565b602082019050919050565b60006020820190508181036000830152611fcf81611f93565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b600061200c601f83611f59565b915061201782611fd6565b602082019050919050565b6000602082019050818103600083015261203b81611fff565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b600061209e602283611f59565b91506120a982612042565b604082019050919050565b600060208201905081810360008301526120cd81612091565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612130602283611f59565b915061213b826120d4565b604082019050919050565b6000602082019050818103600083015261215f81612123565b9050919050565b600060ff82169050919050565b61217c81612166565b82525050565b60006080820190506121976000830187611a1e565b6121a46020830186612173565b6121b16040830185611a1e565b6121be6060830184611a1e565b9594505050505056fea2646970667358221220e38df47a2cc13bc55f4342c8ee5a6455e7fb8527be6fdebb7726a2551e7d8ddf64736f6c634300080b0033

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.