Source Code
Latest 25 from a total of 2,876 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Un Stake | 18890786 | 690 days ago | IN | 0 ETH | 0.0010468 | ||||
| Un Stake | 18890782 | 690 days ago | IN | 0 ETH | 0.00108286 | ||||
| Un Stake | 18890772 | 690 days ago | IN | 0 ETH | 0.0011247 | ||||
| Un Stake | 18890767 | 690 days ago | IN | 0 ETH | 0.00110979 | ||||
| Un Stake | 18890763 | 690 days ago | IN | 0 ETH | 0.00099454 | ||||
| Un Stake | 18890758 | 690 days ago | IN | 0 ETH | 0.00112694 | ||||
| Un Stake | 18890755 | 690 days ago | IN | 0 ETH | 0.00108876 | ||||
| Un Stake | 18890737 | 690 days ago | IN | 0 ETH | 0.00112227 | ||||
| Un Stake | 18254327 | 779 days ago | IN | 0 ETH | 0.00033405 | ||||
| Un Stake | 18254323 | 779 days ago | IN | 0 ETH | 0.00036015 | ||||
| Un Stake | 18207391 | 786 days ago | IN | 0 ETH | 0.00048982 | ||||
| Un Stake | 18174731 | 790 days ago | IN | 0 ETH | 0.00048002 | ||||
| Un Stake | 18151084 | 794 days ago | IN | 0 ETH | 0.00048983 | ||||
| Un Stake | 18151069 | 794 days ago | IN | 0 ETH | 0.00050852 | ||||
| Un Stake | 18151068 | 794 days ago | IN | 0 ETH | 0.00050582 | ||||
| Un Stake | 18118165 | 798 days ago | IN | 0 ETH | 0.00045186 | ||||
| Un Stake | 18118165 | 798 days ago | IN | 0 ETH | 0.00045195 | ||||
| Un Stake | 18118019 | 798 days ago | IN | 0 ETH | 0.00046471 | ||||
| Un Stake | 18107854 | 800 days ago | IN | 0 ETH | 0.00050319 | ||||
| Un Stake | 18107738 | 800 days ago | IN | 0 ETH | 0.00048779 | ||||
| Un Stake | 18104118 | 800 days ago | IN | 0 ETH | 0.00047167 | ||||
| Un Stake | 18103799 | 800 days ago | IN | 0 ETH | 0.00049262 | ||||
| Un Stake | 18101795 | 801 days ago | IN | 0 ETH | 0.0005409 | ||||
| Un Stake | 18101793 | 801 days ago | IN | 0 ETH | 0.00057158 | ||||
| Un Stake | 18101791 | 801 days ago | IN | 0 ETH | 0.00054754 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
RiftersStaking
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-01-17
*/
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @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;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @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 Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @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 {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @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 {
_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 {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_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);
}
}
// File: @openzeppelin/contracts/utils/math/Math.sol
// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)
pragma solidity ^0.8.0;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
enum Rounding {
Down, // Toward negative infinity
Up, // Toward infinity
Zero // Toward zero
}
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow.
return (a & b) + (a ^ b) / 2;
}
/**
* @dev Returns the ceiling of the division of two numbers.
*
* This differs from standard division with `/` in that it rounds up instead
* of rounding down.
*/
function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b - 1) / b can overflow on addition, so we distribute.
return a == 0 ? 0 : (a - 1) / b + 1;
}
/**
* @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0
* @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)
* with further edits by Uniswap Labs also under MIT license.
*/
function mulDiv(
uint256 x,
uint256 y,
uint256 denominator
) internal pure returns (uint256 result) {
unchecked {
// 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
// use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
// variables such that product = prod1 * 2^256 + prod0.
uint256 prod0; // Least significant 256 bits of the product
uint256 prod1; // Most significant 256 bits of the product
assembly {
let mm := mulmod(x, y, not(0))
prod0 := mul(x, y)
prod1 := sub(sub(mm, prod0), lt(mm, prod0))
}
// Handle non-overflow cases, 256 by 256 division.
if (prod1 == 0) {
return prod0 / denominator;
}
// Make sure the result is less than 2^256. Also prevents denominator == 0.
require(denominator > prod1);
///////////////////////////////////////////////
// 512 by 256 division.
///////////////////////////////////////////////
// Make division exact by subtracting the remainder from [prod1 prod0].
uint256 remainder;
assembly {
// Compute remainder using mulmod.
remainder := mulmod(x, y, denominator)
// Subtract 256 bit number from 512 bit number.
prod1 := sub(prod1, gt(remainder, prod0))
prod0 := sub(prod0, remainder)
}
// Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
// See https://cs.stackexchange.com/q/138556/92363.
// Does not overflow because the denominator cannot be zero at this stage in the function.
uint256 twos = denominator & (~denominator + 1);
assembly {
// Divide denominator by twos.
denominator := div(denominator, twos)
// Divide [prod1 prod0] by twos.
prod0 := div(prod0, twos)
// Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
twos := add(div(sub(0, twos), twos), 1)
}
// Shift in bits from prod1 into prod0.
prod0 |= prod1 * twos;
// Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
// that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
// four bits. That is, denominator * inv = 1 mod 2^4.
uint256 inverse = (3 * denominator) ^ 2;
// Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works
// in modular arithmetic, doubling the correct bits in each step.
inverse *= 2 - denominator * inverse; // inverse mod 2^8
inverse *= 2 - denominator * inverse; // inverse mod 2^16
inverse *= 2 - denominator * inverse; // inverse mod 2^32
inverse *= 2 - denominator * inverse; // inverse mod 2^64
inverse *= 2 - denominator * inverse; // inverse mod 2^128
inverse *= 2 - denominator * inverse; // inverse mod 2^256
// Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
// This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
// less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
// is no longer required.
result = prod0 * inverse;
return result;
}
}
/**
* @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
*/
function mulDiv(
uint256 x,
uint256 y,
uint256 denominator,
Rounding rounding
) internal pure returns (uint256) {
uint256 result = mulDiv(x, y, denominator);
if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
result += 1;
}
return result;
}
/**
* @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.
*
* Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
*/
function sqrt(uint256 a) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
// For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
//
// We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
// `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
//
// This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
// → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
// → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
//
// Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
uint256 result = 1 << (log2(a) >> 1);
// At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
// since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
// every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
// into the expected uint128 result.
unchecked {
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
return min(result, a / result);
}
}
/**
* @notice Calculates sqrt(a), following the selected rounding direction.
*/
function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = sqrt(a);
return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
}
}
/**
* @dev Return the log in base 2, rounded down, of a positive value.
* Returns 0 if given 0.
*/
function log2(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 128;
}
if (value >> 64 > 0) {
value >>= 64;
result += 64;
}
if (value >> 32 > 0) {
value >>= 32;
result += 32;
}
if (value >> 16 > 0) {
value >>= 16;
result += 16;
}
if (value >> 8 > 0) {
value >>= 8;
result += 8;
}
if (value >> 4 > 0) {
value >>= 4;
result += 4;
}
if (value >> 2 > 0) {
value >>= 2;
result += 2;
}
if (value >> 1 > 0) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 2, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log2(value);
return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 10, rounded down, of a positive value.
* Returns 0 if given 0.
*/
function log10(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >= 10**64) {
value /= 10**64;
result += 64;
}
if (value >= 10**32) {
value /= 10**32;
result += 32;
}
if (value >= 10**16) {
value /= 10**16;
result += 16;
}
if (value >= 10**8) {
value /= 10**8;
result += 8;
}
if (value >= 10**4) {
value /= 10**4;
result += 4;
}
if (value >= 10**2) {
value /= 10**2;
result += 2;
}
if (value >= 10**1) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 10, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log10(value);
return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 256, rounded down, of a positive value.
* Returns 0 if given 0.
*
* Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
*/
function log256(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 16;
}
if (value >> 64 > 0) {
value >>= 64;
result += 8;
}
if (value >> 32 > 0) {
value >>= 32;
result += 4;
}
if (value >> 16 > 0) {
value >>= 16;
result += 2;
}
if (value >> 8 > 0) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 10, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log256(value);
return result + (rounding == Rounding.Up && 1 << (result * 8) < value ? 1 : 0);
}
}
}
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
unchecked {
uint256 length = Math.log10(value) + 1;
string memory buffer = new string(length);
uint256 ptr;
/// @solidity memory-safe-assembly
assembly {
ptr := add(buffer, add(32, length))
}
while (true) {
ptr--;
/// @solidity memory-safe-assembly
assembly {
mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
}
value /= 10;
if (value == 0) break;
}
return buffer;
}
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
unchecked {
return toHexString(value, Math.log256(value) + 1);
}
}
/**
* @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] = _SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
/**
* @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
*/
function toHexString(address addr) internal pure returns (string memory) {
return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
}
}
// File: @openzeppelin/contracts/utils/cryptography/ECDSA.sol
// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)
pragma solidity ^0.8.0;
/**
* @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 // Deprecated in v4.8
}
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");
}
}
/**
* @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) {
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.
/// @solidity memory-safe-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 {
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 = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
uint8 v = uint8((uint256(vs) >> 255) + 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 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));
}
}
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol
// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// File: contracts/RiftersStaking.sol
interface IERC1155 {
function balanceOf(address account, uint256 id) external returns (uint256);
function safeTransferFrom(
address from,
address to,
uint256 id,
uint256 amount,
bytes memory data
) external;
}
//AETHER
pragma solidity >=0.8.0 <0.9.0;
contract RiftersStaking is ReentrancyGuard, Ownable {
using ECDSA for bytes32;
address public signerAddress;
address public nftContractAddress;
struct stakingState {
address staker;
uint96 nonce;
}
mapping(uint256 => stakingState) public nft;
event nftStaked(address depositer, uint256 nftId, string indexed stakingType);
event nftWithdrawn(address depositer, uint256 nftId);
constructor(address _signerAddress, address _nftContractAddress) {
signerAddress = _signerAddress;
nftContractAddress = _nftContractAddress;
}
function Stake(uint256 nftIds, string calldata stakingType) external payable nonReentrant {
_depositERC1155(msg.sender, nftIds, stakingType);
}
function _depositERC1155(address _from, uint256 id, string calldata stakingType) private {
IERC1155(nftContractAddress).safeTransferFrom(
_from,
address(this),
id,
1,
""
);
setNftStaker(_from, id);
emit nftStaked(_from, id, stakingType);
}
function unStake(uint256 nftId, bytes calldata signature)
external
payable
nonReentrant
{
_withdrawNFT(msg.sender, nftId, signature);
}
function _withdrawNFT(
address to,
uint256 nftId,
bytes calldata signature
) private {
validateStakerOfNft(nftId, to);
validateUsingECDASignature(signature, nftId, nft[nftId].nonce);
resetNftID(nftId);
IERC1155(nftContractAddress).safeTransferFrom(
address(this),
to,
nftId,
1,
""
);
emit nftWithdrawn(to, nftId);
}
function validateUsingECDASignature(
bytes calldata signature,
uint256 tokenId,
uint256 nonce
) public view {
bytes32 hash = keccak256(
abi.encodePacked(bytes32(uint256(uint160(msg.sender))), bytes32(uint256(uint160(address(this)))), tokenId, nonce)
);
require(
signerAddress == hash.toEthSignedMessageHash().recover(signature),
"Signer address mismatch."
);
}
function validateStakerOfNft(uint256 tokenId, address owner) private view {
require(
nft[tokenId].staker == owner,
"this is not the owner of the nft staked"
);
}
function resetNftID(uint256 nftId) private {
nft[nftId].nonce += 1;
nft[nftId].staker = address(0);
}
function setNftStaker(address owner, uint256 nftid) private {
nft[nftid].staker = owner;
}
function setSignerAddress(address _signerAddress)
public
onlyOwner
nonReentrant
{
signerAddress = _signerAddress;
}
function onERC1155Received(
address,
address,
uint256,
uint256,
bytes calldata
) public pure returns (bytes4) {
return this.onERC1155Received.selector;
}
// release address based on shares.
function withdrawEth() external onlyOwner nonReentrant {
(bool success, ) = msg.sender.call{value: address(this).balance}("");
require(success, "Transfer failed.");
}
receive() external payable {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_signerAddress","type":"address"},{"internalType":"address","name":"_nftContractAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":false,"internalType":"address","name":"depositer","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"},{"indexed":true,"internalType":"string","name":"stakingType","type":"string"}],"name":"nftStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"depositer","type":"address"},{"indexed":false,"internalType":"uint256","name":"nftId","type":"uint256"}],"name":"nftWithdrawn","type":"event"},{"inputs":[{"internalType":"uint256","name":"nftIds","type":"uint256"},{"internalType":"string","name":"stakingType","type":"string"}],"name":"Stake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nft","outputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint96","name":"nonce","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","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":"_signerAddress","type":"address"}],"name":"setSignerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nftId","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"unStake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"validateUsingECDASignature","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040523480156200001157600080fd5b5060405162001e5d38038062001e5d833981810160405281019062000037919062000221565b60016000819055506200005f62000053620000e960201b60201c565b620000f160201b60201c565b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000268565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001e982620001bc565b9050919050565b620001fb81620001dc565b81146200020757600080fd5b50565b6000815190506200021b81620001f0565b92915050565b600080604083850312156200023b576200023a620001b7565b5b60006200024b858286016200020a565b92505060206200025e858286016200020a565b9150509250929050565b611be580620002786000396000f3fe6080604052600436106100ab5760003560e01c8063913921381161006457806391392138146101925780639d0214cb146101ae578063a0ef91df146101ec578063aae282e114610203578063f23a6e611461022e578063f2fde38b1461026b576100b2565b8063046dc166146100b7578063432498a4146100e05780635b7633d014610109578063715018a6146101345780638aa8eeb91461014b5780638da5cb5b14610167576100b2565b366100b257005b600080fd5b3480156100c357600080fd5b506100de60048036038101906100d99190610fb6565b610294565b005b3480156100ec57600080fd5b506101076004803603810190610102919061107e565b6102f0565b005b34801561011557600080fd5b5061011e610448565b60405161012b9190611101565b60405180910390f35b34801561014057600080fd5b5061014961046e565b005b61016560048036038101906101609190611172565b610482565b005b34801561017357600080fd5b5061017c6104a3565b6040516101899190611101565b60405180910390f35b6101ac60048036038101906101a791906111d2565b6104cd565b005b3480156101ba57600080fd5b506101d560048036038101906101d09190611232565b6104ee565b6040516101e3929190611286565b60405180910390f35b3480156101f857600080fd5b5061020161054a565b005b34801561020f57600080fd5b50610218610611565b6040516102259190611101565b60405180910390f35b34801561023a57600080fd5b50610255600480360381019061025091906112af565b610637565b6040516102629190611384565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190610fb6565b61064d565b005b61029c6106d0565b6102a461074e565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506102ed61079d565b50565b60003373ffffffffffffffffffffffffffffffffffffffff1660001b3073ffffffffffffffffffffffffffffffffffffffff1660001b848460405160200161033b94939291906113eb565b6040516020818303038152906040528051906020012090506103b285858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506103a4836107a7565b6107d790919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043890611496565b60405180910390fd5b5050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6104766106d0565b61048060006107fe565b565b61048a61074e565b610496338484846108c4565b61049e61079d565b505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6104d561074e565b6104e1338484846109b9565b6104e961079d565b505050565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a90046bffffffffffffffffffffffff16905082565b6105526106d0565b61055a61074e565b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610580906114e7565b60006040518083038185875af1925050503d80600081146105bd576040519150601f19603f3d011682016040523d82523d6000602084013e6105c2565b606091505b5050905080610606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fd90611548565b60405180910390fd5b5061060f61079d565b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600063f23a6e6160e01b90509695505050505050565b6106556106d0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bb906115da565b60405180910390fd5b6106cd816107fe565b50565b6106d8610ae7565b73ffffffffffffffffffffffffffffffffffffffff166106f66104a3565b73ffffffffffffffffffffffffffffffffffffffff161461074c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074390611646565b60405180910390fd5b565b600260005403610793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078a906116b2565b60405180910390fd5b6002600081905550565b6001600081905550565b6000816040516020016107ba9190611729565b604051602081830303815290604052805190602001209050919050565b60008060006107e68585610aef565b915091506107f381610b40565b819250505092915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a85308660016040518563ffffffff1660e01b815260040161092694939291906117d7565b600060405180830381600087803b15801561094057600080fd5b505af1158015610954573d6000803e3d6000fd5b505050506109628484610ca6565b8181604051610972929190611863565b60405180910390207fb481e3868d5f860b774cc1412ff057b3c188908e61f51d248c9c3316b53aa42185856040516109ab92919061187c565b60405180910390a250505050565b6109c38385610cff565b610a0b8282856004600088815260200190815260200160002060000160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166102f0565b610a1483610da7565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30868660016040518563ffffffff1660e01b8152600401610a7694939291906117d7565b600060405180830381600087803b158015610a9057600080fd5b505af1158015610aa4573d6000803e3d6000fd5b505050507fa6ae13e874b1dc6d662594f8afc2923d1dbdf0489ac6faa0ebb8751afb20b67b8484604051610ad992919061187c565b60405180910390a150505050565b600033905090565b6000806041835103610b305760008060006020860151925060408601519150606086015160001a9050610b2487828585610e6c565b94509450505050610b39565b60006002915091505b9250929050565b60006004811115610b5457610b536118a5565b5b816004811115610b6757610b666118a5565b5b0315610ca35760016004811115610b8157610b806118a5565b5b816004811115610b9457610b936118a5565b5b03610bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcb90611920565b60405180910390fd5b60026004811115610be857610be76118a5565b5b816004811115610bfb57610bfa6118a5565b5b03610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c329061198c565b60405180910390fd5b60036004811115610c4f57610c4e6118a5565b5b816004811115610c6257610c616118a5565b5b03610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9990611a1e565b60405180910390fd5b5b50565b816004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b8073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a90611ab0565b60405180910390fd5b5050565b60016004600083815260200190815260200160002060000160148282829054906101000a90046bffffffffffffffffffffffff16610de59190611aff565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555060006004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea7576000600391509150610f45565b600060018787878760405160008152602001604052604051610ecc9493929190611b6a565b6020604051602081039080840390855afa158015610eee573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3c57600060019250925050610f45565b80600092509250505b94509492505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f8382610f58565b9050919050565b610f9381610f78565b8114610f9e57600080fd5b50565b600081359050610fb081610f8a565b92915050565b600060208284031215610fcc57610fcb610f4e565b5b6000610fda84828501610fa1565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261100857611007610fe3565b5b8235905067ffffffffffffffff81111561102557611024610fe8565b5b60208301915083600182028301111561104157611040610fed565b5b9250929050565b6000819050919050565b61105b81611048565b811461106657600080fd5b50565b60008135905061107881611052565b92915050565b6000806000806060858703121561109857611097610f4e565b5b600085013567ffffffffffffffff8111156110b6576110b5610f53565b5b6110c287828801610ff2565b945094505060206110d587828801611069565b92505060406110e687828801611069565b91505092959194509250565b6110fb81610f78565b82525050565b600060208201905061111660008301846110f2565b92915050565b60008083601f84011261113257611131610fe3565b5b8235905067ffffffffffffffff81111561114f5761114e610fe8565b5b60208301915083600182028301111561116b5761116a610fed565b5b9250929050565b60008060006040848603121561118b5761118a610f4e565b5b600061119986828701611069565b935050602084013567ffffffffffffffff8111156111ba576111b9610f53565b5b6111c68682870161111c565b92509250509250925092565b6000806000604084860312156111eb576111ea610f4e565b5b60006111f986828701611069565b935050602084013567ffffffffffffffff81111561121a57611219610f53565b5b61122686828701610ff2565b92509250509250925092565b60006020828403121561124857611247610f4e565b5b600061125684828501611069565b91505092915050565b60006bffffffffffffffffffffffff82169050919050565b6112808161125f565b82525050565b600060408201905061129b60008301856110f2565b6112a86020830184611277565b9392505050565b60008060008060008060a087890312156112cc576112cb610f4e565b5b60006112da89828a01610fa1565b96505060206112eb89828a01610fa1565b95505060406112fc89828a01611069565b945050606061130d89828a01611069565b935050608087013567ffffffffffffffff81111561132e5761132d610f53565b5b61133a89828a01610ff2565b92509250509295509295509295565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61137e81611349565b82525050565b60006020820190506113996000830184611375565b92915050565b6000819050919050565b6000819050919050565b6113c46113bf8261139f565b6113a9565b82525050565b6000819050919050565b6113e56113e082611048565b6113ca565b82525050565b60006113f782876113b3565b60208201915061140782866113b3565b60208201915061141782856113d4565b60208201915061142782846113d4565b60208201915081905095945050505050565b600082825260208201905092915050565b7f5369676e65722061646472657373206d69736d617463682e0000000000000000600082015250565b6000611480601883611439565b915061148b8261144a565b602082019050919050565b600060208201905081810360008301526114af81611473565b9050919050565b600081905092915050565b50565b60006114d16000836114b6565b91506114dc826114c1565b600082019050919050565b60006114f2826114c4565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000611532601083611439565b915061153d826114fc565b602082019050919050565b6000602082019050818103600083015261156181611525565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006115c4602683611439565b91506115cf82611568565b604082019050919050565b600060208201905081810360008301526115f3816115b7565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611630602083611439565b915061163b826115fa565b602082019050919050565b6000602082019050818103600083015261165f81611623565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061169c601f83611439565b91506116a782611666565b602082019050919050565b600060208201905081810360008301526116cb8161168f565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000611713601c836116d2565b915061171e826116dd565b601c82019050919050565b600061173482611706565b915061174082846113b3565b60208201915081905092915050565b61175881611048565b82525050565b6000819050919050565b6000819050919050565b600061178d6117886117838461175e565b611768565b611048565b9050919050565b61179d81611772565b82525050565b600082825260208201905092915050565b60006117c16000836117a3565b91506117cc826114c1565b600082019050919050565b600060a0820190506117ec60008301876110f2565b6117f960208301866110f2565b611806604083018561174f565b6118136060830184611794565b8181036080830152611824816117b4565b905095945050505050565b82818337600083830152505050565b600061184a83856116d2565b935061185783858461182f565b82840190509392505050565b600061187082848661183e565b91508190509392505050565b600060408201905061189160008301856110f2565b61189e602083018461174f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b600061190a601883611439565b9150611915826118d4565b602082019050919050565b60006020820190508181036000830152611939816118fd565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611976601f83611439565b915061198182611940565b602082019050919050565b600060208201905081810360008301526119a581611969565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611a08602283611439565b9150611a13826119ac565b604082019050919050565b60006020820190508181036000830152611a37816119fb565b9050919050565b7f74686973206973206e6f7420746865206f776e6572206f6620746865206e667460008201527f207374616b656400000000000000000000000000000000000000000000000000602082015250565b6000611a9a602783611439565b9150611aa582611a3e565b604082019050919050565b60006020820190508181036000830152611ac981611a8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b0a8261125f565b9150611b158361125f565b925082820190506bffffffffffffffffffffffff811115611b3957611b38611ad0565b5b92915050565b611b488161139f565b82525050565b600060ff82169050919050565b611b6481611b4e565b82525050565b6000608082019050611b7f6000830187611b3f565b611b8c6020830186611b5b565b611b996040830185611b3f565b611ba66060830184611b3f565b9594505050505056fea26469706673582212206451edb234fcaa935f9d15016d14bd7c6cde8a1b6f9a89dcb11018b873ec023564736f6c63430008110033000000000000000000000000c4d12607206f2f1eea6f8e05241ed052f39a3691000000000000000000000000f37cb20090057bdc70b928b7f91d081d412cfe5c
Deployed Bytecode
0x6080604052600436106100ab5760003560e01c8063913921381161006457806391392138146101925780639d0214cb146101ae578063a0ef91df146101ec578063aae282e114610203578063f23a6e611461022e578063f2fde38b1461026b576100b2565b8063046dc166146100b7578063432498a4146100e05780635b7633d014610109578063715018a6146101345780638aa8eeb91461014b5780638da5cb5b14610167576100b2565b366100b257005b600080fd5b3480156100c357600080fd5b506100de60048036038101906100d99190610fb6565b610294565b005b3480156100ec57600080fd5b506101076004803603810190610102919061107e565b6102f0565b005b34801561011557600080fd5b5061011e610448565b60405161012b9190611101565b60405180910390f35b34801561014057600080fd5b5061014961046e565b005b61016560048036038101906101609190611172565b610482565b005b34801561017357600080fd5b5061017c6104a3565b6040516101899190611101565b60405180910390f35b6101ac60048036038101906101a791906111d2565b6104cd565b005b3480156101ba57600080fd5b506101d560048036038101906101d09190611232565b6104ee565b6040516101e3929190611286565b60405180910390f35b3480156101f857600080fd5b5061020161054a565b005b34801561020f57600080fd5b50610218610611565b6040516102259190611101565b60405180910390f35b34801561023a57600080fd5b50610255600480360381019061025091906112af565b610637565b6040516102629190611384565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d9190610fb6565b61064d565b005b61029c6106d0565b6102a461074e565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506102ed61079d565b50565b60003373ffffffffffffffffffffffffffffffffffffffff1660001b3073ffffffffffffffffffffffffffffffffffffffff1660001b848460405160200161033b94939291906113eb565b6040516020818303038152906040528051906020012090506103b285858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506103a4836107a7565b6107d790919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043890611496565b60405180910390fd5b5050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6104766106d0565b61048060006107fe565b565b61048a61074e565b610496338484846108c4565b61049e61079d565b505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6104d561074e565b6104e1338484846109b9565b6104e961079d565b505050565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a90046bffffffffffffffffffffffff16905082565b6105526106d0565b61055a61074e565b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610580906114e7565b60006040518083038185875af1925050503d80600081146105bd576040519150601f19603f3d011682016040523d82523d6000602084013e6105c2565b606091505b5050905080610606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fd90611548565b60405180910390fd5b5061060f61079d565b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600063f23a6e6160e01b90509695505050505050565b6106556106d0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bb906115da565b60405180910390fd5b6106cd816107fe565b50565b6106d8610ae7565b73ffffffffffffffffffffffffffffffffffffffff166106f66104a3565b73ffffffffffffffffffffffffffffffffffffffff161461074c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074390611646565b60405180910390fd5b565b600260005403610793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078a906116b2565b60405180910390fd5b6002600081905550565b6001600081905550565b6000816040516020016107ba9190611729565b604051602081830303815290604052805190602001209050919050565b60008060006107e68585610aef565b915091506107f381610b40565b819250505092915050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a85308660016040518563ffffffff1660e01b815260040161092694939291906117d7565b600060405180830381600087803b15801561094057600080fd5b505af1158015610954573d6000803e3d6000fd5b505050506109628484610ca6565b8181604051610972929190611863565b60405180910390207fb481e3868d5f860b774cc1412ff057b3c188908e61f51d248c9c3316b53aa42185856040516109ab92919061187c565b60405180910390a250505050565b6109c38385610cff565b610a0b8282856004600088815260200190815260200160002060000160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166102f0565b610a1483610da7565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30868660016040518563ffffffff1660e01b8152600401610a7694939291906117d7565b600060405180830381600087803b158015610a9057600080fd5b505af1158015610aa4573d6000803e3d6000fd5b505050507fa6ae13e874b1dc6d662594f8afc2923d1dbdf0489ac6faa0ebb8751afb20b67b8484604051610ad992919061187c565b60405180910390a150505050565b600033905090565b6000806041835103610b305760008060006020860151925060408601519150606086015160001a9050610b2487828585610e6c565b94509450505050610b39565b60006002915091505b9250929050565b60006004811115610b5457610b536118a5565b5b816004811115610b6757610b666118a5565b5b0315610ca35760016004811115610b8157610b806118a5565b5b816004811115610b9457610b936118a5565b5b03610bd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcb90611920565b60405180910390fd5b60026004811115610be857610be76118a5565b5b816004811115610bfb57610bfa6118a5565b5b03610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c329061198c565b60405180910390fd5b60036004811115610c4f57610c4e6118a5565b5b816004811115610c6257610c616118a5565b5b03610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9990611a1e565b60405180910390fd5b5b50565b816004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b8073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a90611ab0565b60405180910390fd5b5050565b60016004600083815260200190815260200160002060000160148282829054906101000a90046bffffffffffffffffffffffff16610de59190611aff565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555060006004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115610ea7576000600391509150610f45565b600060018787878760405160008152602001604052604051610ecc9493929190611b6a565b6020604051602081039080840390855afa158015610eee573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3c57600060019250925050610f45565b80600092509250505b94509492505050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f8382610f58565b9050919050565b610f9381610f78565b8114610f9e57600080fd5b50565b600081359050610fb081610f8a565b92915050565b600060208284031215610fcc57610fcb610f4e565b5b6000610fda84828501610fa1565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261100857611007610fe3565b5b8235905067ffffffffffffffff81111561102557611024610fe8565b5b60208301915083600182028301111561104157611040610fed565b5b9250929050565b6000819050919050565b61105b81611048565b811461106657600080fd5b50565b60008135905061107881611052565b92915050565b6000806000806060858703121561109857611097610f4e565b5b600085013567ffffffffffffffff8111156110b6576110b5610f53565b5b6110c287828801610ff2565b945094505060206110d587828801611069565b92505060406110e687828801611069565b91505092959194509250565b6110fb81610f78565b82525050565b600060208201905061111660008301846110f2565b92915050565b60008083601f84011261113257611131610fe3565b5b8235905067ffffffffffffffff81111561114f5761114e610fe8565b5b60208301915083600182028301111561116b5761116a610fed565b5b9250929050565b60008060006040848603121561118b5761118a610f4e565b5b600061119986828701611069565b935050602084013567ffffffffffffffff8111156111ba576111b9610f53565b5b6111c68682870161111c565b92509250509250925092565b6000806000604084860312156111eb576111ea610f4e565b5b60006111f986828701611069565b935050602084013567ffffffffffffffff81111561121a57611219610f53565b5b61122686828701610ff2565b92509250509250925092565b60006020828403121561124857611247610f4e565b5b600061125684828501611069565b91505092915050565b60006bffffffffffffffffffffffff82169050919050565b6112808161125f565b82525050565b600060408201905061129b60008301856110f2565b6112a86020830184611277565b9392505050565b60008060008060008060a087890312156112cc576112cb610f4e565b5b60006112da89828a01610fa1565b96505060206112eb89828a01610fa1565b95505060406112fc89828a01611069565b945050606061130d89828a01611069565b935050608087013567ffffffffffffffff81111561132e5761132d610f53565b5b61133a89828a01610ff2565b92509250509295509295509295565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61137e81611349565b82525050565b60006020820190506113996000830184611375565b92915050565b6000819050919050565b6000819050919050565b6113c46113bf8261139f565b6113a9565b82525050565b6000819050919050565b6113e56113e082611048565b6113ca565b82525050565b60006113f782876113b3565b60208201915061140782866113b3565b60208201915061141782856113d4565b60208201915061142782846113d4565b60208201915081905095945050505050565b600082825260208201905092915050565b7f5369676e65722061646472657373206d69736d617463682e0000000000000000600082015250565b6000611480601883611439565b915061148b8261144a565b602082019050919050565b600060208201905081810360008301526114af81611473565b9050919050565b600081905092915050565b50565b60006114d16000836114b6565b91506114dc826114c1565b600082019050919050565b60006114f2826114c4565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000611532601083611439565b915061153d826114fc565b602082019050919050565b6000602082019050818103600083015261156181611525565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006115c4602683611439565b91506115cf82611568565b604082019050919050565b600060208201905081810360008301526115f3816115b7565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611630602083611439565b915061163b826115fa565b602082019050919050565b6000602082019050818103600083015261165f81611623565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061169c601f83611439565b91506116a782611666565b602082019050919050565b600060208201905081810360008301526116cb8161168f565b9050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b6000611713601c836116d2565b915061171e826116dd565b601c82019050919050565b600061173482611706565b915061174082846113b3565b60208201915081905092915050565b61175881611048565b82525050565b6000819050919050565b6000819050919050565b600061178d6117886117838461175e565b611768565b611048565b9050919050565b61179d81611772565b82525050565b600082825260208201905092915050565b60006117c16000836117a3565b91506117cc826114c1565b600082019050919050565b600060a0820190506117ec60008301876110f2565b6117f960208301866110f2565b611806604083018561174f565b6118136060830184611794565b8181036080830152611824816117b4565b905095945050505050565b82818337600083830152505050565b600061184a83856116d2565b935061185783858461182f565b82840190509392505050565b600061187082848661183e565b91508190509392505050565b600060408201905061189160008301856110f2565b61189e602083018461174f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b600061190a601883611439565b9150611915826118d4565b602082019050919050565b60006020820190508181036000830152611939816118fd565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000611976601f83611439565b915061198182611940565b602082019050919050565b600060208201905081810360008301526119a581611969565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000611a08602283611439565b9150611a13826119ac565b604082019050919050565b60006020820190508181036000830152611a37816119fb565b9050919050565b7f74686973206973206e6f7420746865206f776e6572206f6620746865206e667460008201527f207374616b656400000000000000000000000000000000000000000000000000602082015250565b6000611a9a602783611439565b9150611aa582611a3e565b604082019050919050565b60006020820190508181036000830152611ac981611a8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b0a8261125f565b9150611b158361125f565b925082820190506bffffffffffffffffffffffff811115611b3957611b38611ad0565b5b92915050565b611b488161139f565b82525050565b600060ff82169050919050565b611b6481611b4e565b82525050565b6000608082019050611b7f6000830187611b3f565b611b8c6020830186611b5b565b611b996040830185611b3f565b611ba66060830184611b3f565b9594505050505056fea26469706673582212206451edb234fcaa935f9d15016d14bd7c6cde8a1b6f9a89dcb11018b873ec023564736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c4d12607206f2f1eea6f8e05241ed052f39a3691000000000000000000000000f37cb20090057bdc70b928b7f91d081d412cfe5c
-----Decoded View---------------
Arg [0] : _signerAddress (address): 0xC4D12607206F2f1eeA6f8E05241eD052F39A3691
Arg [1] : _nftContractAddress (address): 0xf37CB20090057BDC70b928B7F91D081d412cfe5C
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000c4d12607206f2f1eea6f8e05241ed052f39a3691
Arg [1] : 000000000000000000000000f37cb20090057bdc70b928b7f91d081d412cfe5c
Deployed Bytecode Sourcemap
30841:3064:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33307:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32461:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30926:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2776:103;;;;;;;;;;;;;:::i;:::-;;31423:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2128:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31887:161;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31071:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;33688:179;;;;;;;;;;;;;:::i;:::-;;30959:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33454:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3034:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33307:141;2014:13;:11;:13::i;:::-;29898:21:::1;:19;:21::i;:::-;33428:14:::2;33412:13;;:30;;;;;;;;;;;;;;;;;;29942:20:::1;:18;:20::i;:::-;33307:141:::0;:::o;32461:422::-;32594:12;32668:10;32652:28;;32644:37;;32715:4;32691:31;;32683:40;;32725:7;32734:5;32627:113;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32609:138;;;;;;32594:153;;32787:48;32825:9;;32787:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:29;:4;:27;:29::i;:::-;:37;;:48;;;;:::i;:::-;32770:65;;:13;;;;;;;;;;;:65;;;32754:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;32587:296;32461:422;;;;:::o;30926:28::-;;;;;;;;;;;;;:::o;2776:103::-;2014:13;:11;:13::i;:::-;2841:30:::1;2868:1;2841:18;:30::i;:::-;2776:103::o:0;31423:151::-;29898:21;:19;:21::i;:::-;31520:48:::1;31536:10;31548:6;31556:11;;31520:15;:48::i;:::-;29942:20:::0;:18;:20::i;:::-;31423:151;;;:::o;2128:87::-;2174:7;2201:6;;;;;;;;;;;2194:13;;2128:87;:::o;31887:161::-;29898:21;:19;:21::i;:::-;32000:42:::1;32013:10;32025:5;32032:9;;32000:12;:42::i;:::-;29942:20:::0;:18;:20::i;:::-;31887:161;;;:::o;31071:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33688:179::-;2014:13;:11;:13::i;:::-;29898:21:::1;:19;:21::i;:::-;33751:12:::2;33769:10;:15;;33792:21;33769:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33750:68;;;33833:7;33825:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;33743:124;29942:20:::1;:18;:20::i;:::-;33688:179::o:0;30959:33::-;;;;;;;;;;;;;:::o;33454:189::-;33584:6;33606:31;;;33599:38;;33454:189;;;;;;;;:::o;3034:201::-;2014:13;:11;:13::i;:::-;3143:1:::1;3123:22;;:8;:22;;::::0;3115:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3199:28;3218:8;3199:18;:28::i;:::-;3034:201:::0;:::o;2293:132::-;2368:12;:10;:12::i;:::-;2357:23;;:7;:5;:7::i;:::-;:23;;;2349:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2293:132::o;29978:293::-;29380:1;30112:7;;:19;30104:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;29380:1;30245:7;:18;;;;29978:293::o;30279:213::-;29336:1;30462:7;:22;;;;30279:213::o;26238:269::-;26307:7;26493:4;26440:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;26430:69;;;;;;26423:76;;26238:269;;;:::o;22548:231::-;22626:7;22647:17;22666:18;22688:27;22699:4;22705:9;22688:10;:27::i;:::-;22646:69;;;;22726:18;22738:5;22726:11;:18::i;:::-;22762:9;22755:16;;;;22548:231;;;;:::o;3395:191::-;3469:16;3488:6;;;;;;;;;;;3469:25;;3514:8;3505:6;;:17;;;;;;;;;;;;;;;;;;3569:8;3538:40;;3559:8;3538:40;;;;;;;;;;;;3458:128;3395:191;:::o;31584:297::-;31689:18;;;;;;;;;;;31680:45;;;31734:5;31756:4;31770:2;31781:1;31680:120;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31807:23;31820:5;31827:2;31807:12;:23::i;:::-;31863:11;;31842:33;;;;;;;:::i;:::-;;;;;;;;;31852:5;31859:2;31842:33;;;;;;;:::i;:::-;;;;;;;;31584:297;;;;:::o;32054:401::-;32164:30;32184:5;32191:2;32164:19;:30::i;:::-;32201:62;32228:9;;32239:5;32246:3;:10;32250:5;32246:10;;;;;;;;;;;:16;;;;;;;;;;;;32201:62;;:26;:62::i;:::-;32270:17;32281:5;32270:10;:17::i;:::-;32303:18;;;;;;;;;;;32294:45;;;32356:4;32370:2;32381:5;32395:1;32294:120;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32426:23;32439:2;32443:5;32426:23;;;;;;;:::i;:::-;;;;;;;;32054:401;;;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;20999:747::-;21080:7;21089:12;21138:2;21118:9;:16;:22;21114:625;;21157:9;21181;21205:7;21462:4;21451:9;21447:20;21441:27;21436:32;;21512:4;21501:9;21497:20;21491:27;21486:32;;21570:4;21559:9;21555:20;21549:27;21546:1;21541:36;21536:41;;21613:25;21624:4;21630:1;21633;21636;21613:10;:25::i;:::-;21606:32;;;;;;;;;21114:625;21687:1;21691:35;21671:56;;;;20999:747;;;;;;:::o;19392:521::-;19470:20;19461:29;;;;;;;;:::i;:::-;;:5;:29;;;;;;;;:::i;:::-;;;19457:449;19507:7;19457:449;19568:29;19559:38;;;;;;;;:::i;:::-;;:5;:38;;;;;;;;:::i;:::-;;;19555:351;;19614:34;;;;;;;;;;:::i;:::-;;;;;;;;19555:351;19679:35;19670:44;;;;;;;;:::i;:::-;;:5;:44;;;;;;;;:::i;:::-;;;19666:240;;19731:41;;;;;;;;;;:::i;:::-;;;;;;;;19666:240;19803:30;19794:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;19790:116;;19850:44;;;;;;;;;;:::i;:::-;;;;;;;;19790:116;19392:521;;:::o;33203:98::-;33290:5;33270:3;:10;33274:5;33270:10;;;;;;;;;;;:17;;;:25;;;;;;;;;;;;;;;;;;33203:98;;:::o;32889:188::-;33009:5;32986:28;;:3;:12;32990:7;32986:12;;;;;;;;;;;:19;;;;;;;;;;;;:28;;;32970:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;32889:188;;:::o;33083:114::-;33153:1;33133:3;:10;33137:5;33133:10;;;;;;;;;;;:16;;;:21;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33189:1;33161:3;:10;33165:5;33161:10;;;;;;;;;;;:17;;;:30;;;;;;;;;;;;;;;;;;33083:114;:::o;24000:1520::-;24131:7;24140:12;25065:66;25060:1;25052:10;;:79;25048:163;;;25164:1;25168:30;25148:51;;;;;;25048:163;25308:14;25325:24;25335:4;25341:1;25344;25347;25325:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25308:41;;25382:1;25364:20;;:6;:20;;;25360:103;;25417:1;25421:29;25401:50;;;;;;;25360:103;25483:6;25491:20;25475:37;;;;;24000:1520;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:117::-;1285:1;1282;1275:12;1299:117;1408:1;1405;1398:12;1422:117;1531:1;1528;1521:12;1558:552;1615:8;1625:6;1675:3;1668:4;1660:6;1656:17;1652:27;1642:122;;1683:79;;:::i;:::-;1642:122;1796:6;1783:20;1773:30;;1826:18;1818:6;1815:30;1812:117;;;1848:79;;:::i;:::-;1812:117;1962:4;1954:6;1950:17;1938:29;;2016:3;2008:4;2000:6;1996:17;1986:8;1982:32;1979:41;1976:128;;;2023:79;;:::i;:::-;1976:128;1558:552;;;;;:::o;2116:77::-;2153:7;2182:5;2171:16;;2116:77;;;:::o;2199:122::-;2272:24;2290:5;2272:24;:::i;:::-;2265:5;2262:35;2252:63;;2311:1;2308;2301:12;2252:63;2199:122;:::o;2327:139::-;2373:5;2411:6;2398:20;2389:29;;2427:33;2454:5;2427:33;:::i;:::-;2327:139;;;;:::o;2472:817::-;2560:6;2568;2576;2584;2633:2;2621:9;2612:7;2608:23;2604:32;2601:119;;;2639:79;;:::i;:::-;2601:119;2787:1;2776:9;2772:17;2759:31;2817:18;2809:6;2806:30;2803:117;;;2839:79;;:::i;:::-;2803:117;2952:64;3008:7;2999:6;2988:9;2984:22;2952:64;:::i;:::-;2934:82;;;;2730:296;3065:2;3091:53;3136:7;3127:6;3116:9;3112:22;3091:53;:::i;:::-;3081:63;;3036:118;3193:2;3219:53;3264:7;3255:6;3244:9;3240:22;3219:53;:::i;:::-;3209:63;;3164:118;2472:817;;;;;;;:::o;3295:118::-;3382:24;3400:5;3382:24;:::i;:::-;3377:3;3370:37;3295:118;;:::o;3419:222::-;3512:4;3550:2;3539:9;3535:18;3527:26;;3563:71;3631:1;3620:9;3616:17;3607:6;3563:71;:::i;:::-;3419:222;;;;:::o;3661:553::-;3719:8;3729:6;3779:3;3772:4;3764:6;3760:17;3756:27;3746:122;;3787:79;;:::i;:::-;3746:122;3900:6;3887:20;3877:30;;3930:18;3922:6;3919:30;3916:117;;;3952:79;;:::i;:::-;3916:117;4066:4;4058:6;4054:17;4042:29;;4120:3;4112:4;4104:6;4100:17;4090:8;4086:32;4083:41;4080:128;;;4127:79;;:::i;:::-;4080:128;3661:553;;;;;:::o;4220:674::-;4300:6;4308;4316;4365:2;4353:9;4344:7;4340:23;4336:32;4333:119;;;4371:79;;:::i;:::-;4333:119;4491:1;4516:53;4561:7;4552:6;4541:9;4537:22;4516:53;:::i;:::-;4506:63;;4462:117;4646:2;4635:9;4631:18;4618:32;4677:18;4669:6;4666:30;4663:117;;;4699:79;;:::i;:::-;4663:117;4812:65;4869:7;4860:6;4849:9;4845:22;4812:65;:::i;:::-;4794:83;;;;4589:298;4220:674;;;;;:::o;4900:672::-;4979:6;4987;4995;5044:2;5032:9;5023:7;5019:23;5015:32;5012:119;;;5050:79;;:::i;:::-;5012:119;5170:1;5195:53;5240:7;5231:6;5220:9;5216:22;5195:53;:::i;:::-;5185:63;;5141:117;5325:2;5314:9;5310:18;5297:32;5356:18;5348:6;5345:30;5342:117;;;5378:79;;:::i;:::-;5342:117;5491:64;5547:7;5538:6;5527:9;5523:22;5491:64;:::i;:::-;5473:82;;;;5268:297;4900:672;;;;;:::o;5578:329::-;5637:6;5686:2;5674:9;5665:7;5661:23;5657:32;5654:119;;;5692:79;;:::i;:::-;5654:119;5812:1;5837:53;5882:7;5873:6;5862:9;5858:22;5837:53;:::i;:::-;5827:63;;5783:117;5578:329;;;;:::o;5913:109::-;5949:7;5989:26;5982:5;5978:38;5967:49;;5913:109;;;:::o;6028:115::-;6113:23;6130:5;6113:23;:::i;:::-;6108:3;6101:36;6028:115;;:::o;6149:328::-;6268:4;6306:2;6295:9;6291:18;6283:26;;6319:71;6387:1;6376:9;6372:17;6363:6;6319:71;:::i;:::-;6400:70;6466:2;6455:9;6451:18;6442:6;6400:70;:::i;:::-;6149:328;;;;;:::o;6483:1109::-;6589:6;6597;6605;6613;6621;6629;6678:3;6666:9;6657:7;6653:23;6649:33;6646:120;;;6685:79;;:::i;:::-;6646:120;6805:1;6830:53;6875:7;6866:6;6855:9;6851:22;6830:53;:::i;:::-;6820:63;;6776:117;6932:2;6958:53;7003:7;6994:6;6983:9;6979:22;6958:53;:::i;:::-;6948:63;;6903:118;7060:2;7086:53;7131:7;7122:6;7111:9;7107:22;7086:53;:::i;:::-;7076:63;;7031:118;7188:2;7214:53;7259:7;7250:6;7239:9;7235:22;7214:53;:::i;:::-;7204:63;;7159:118;7344:3;7333:9;7329:19;7316:33;7376:18;7368:6;7365:30;7362:117;;;7398:79;;:::i;:::-;7362:117;7511:64;7567:7;7558:6;7547:9;7543:22;7511:64;:::i;:::-;7493:82;;;;7287:298;6483:1109;;;;;;;;:::o;7598:149::-;7634:7;7674:66;7667:5;7663:78;7652:89;;7598:149;;;:::o;7753:115::-;7838:23;7855:5;7838:23;:::i;:::-;7833:3;7826:36;7753:115;;:::o;7874:218::-;7965:4;8003:2;7992:9;7988:18;7980:26;;8016:69;8082:1;8071:9;8067:17;8058:6;8016:69;:::i;:::-;7874:218;;;;:::o;8098:77::-;8135:7;8164:5;8153:16;;8098:77;;;:::o;8181:79::-;8220:7;8249:5;8238:16;;8181:79;;;:::o;8266:157::-;8371:45;8391:24;8409:5;8391:24;:::i;:::-;8371:45;:::i;:::-;8366:3;8359:58;8266:157;;:::o;8429:79::-;8468:7;8497:5;8486:16;;8429:79;;;:::o;8514:157::-;8619:45;8639:24;8657:5;8639:24;:::i;:::-;8619:45;:::i;:::-;8614:3;8607:58;8514:157;;:::o;8677:679::-;8873:3;8888:75;8959:3;8950:6;8888:75;:::i;:::-;8988:2;8983:3;8979:12;8972:19;;9001:75;9072:3;9063:6;9001:75;:::i;:::-;9101:2;9096:3;9092:12;9085:19;;9114:75;9185:3;9176:6;9114:75;:::i;:::-;9214:2;9209:3;9205:12;9198:19;;9227:75;9298:3;9289:6;9227:75;:::i;:::-;9327:2;9322:3;9318:12;9311:19;;9347:3;9340:10;;8677:679;;;;;;;:::o;9362:169::-;9446:11;9480:6;9475:3;9468:19;9520:4;9515:3;9511:14;9496:29;;9362:169;;;;:::o;9537:174::-;9677:26;9673:1;9665:6;9661:14;9654:50;9537:174;:::o;9717:366::-;9859:3;9880:67;9944:2;9939:3;9880:67;:::i;:::-;9873:74;;9956:93;10045:3;9956:93;:::i;:::-;10074:2;10069:3;10065:12;10058:19;;9717:366;;;:::o;10089:419::-;10255:4;10293:2;10282:9;10278:18;10270:26;;10342:9;10336:4;10332:20;10328:1;10317:9;10313:17;10306:47;10370:131;10496:4;10370:131;:::i;:::-;10362:139;;10089:419;;;:::o;10514:147::-;10615:11;10652:3;10637:18;;10514:147;;;;:::o;10667:114::-;;:::o;10787:398::-;10946:3;10967:83;11048:1;11043:3;10967:83;:::i;:::-;10960:90;;11059:93;11148:3;11059:93;:::i;:::-;11177:1;11172:3;11168:11;11161:18;;10787:398;;;:::o;11191:379::-;11375:3;11397:147;11540:3;11397:147;:::i;:::-;11390:154;;11561:3;11554:10;;11191:379;;;:::o;11576:166::-;11716:18;11712:1;11704:6;11700:14;11693:42;11576:166;:::o;11748:366::-;11890:3;11911:67;11975:2;11970:3;11911:67;:::i;:::-;11904:74;;11987:93;12076:3;11987:93;:::i;:::-;12105:2;12100:3;12096:12;12089:19;;11748:366;;;:::o;12120:419::-;12286:4;12324:2;12313:9;12309:18;12301:26;;12373:9;12367:4;12363:20;12359:1;12348:9;12344:17;12337:47;12401:131;12527:4;12401:131;:::i;:::-;12393:139;;12120:419;;;:::o;12545:225::-;12685:34;12681:1;12673:6;12669:14;12662:58;12754:8;12749:2;12741:6;12737:15;12730:33;12545:225;:::o;12776:366::-;12918:3;12939:67;13003:2;12998:3;12939:67;:::i;:::-;12932:74;;13015:93;13104:3;13015:93;:::i;:::-;13133:2;13128:3;13124:12;13117:19;;12776:366;;;:::o;13148:419::-;13314:4;13352:2;13341:9;13337:18;13329:26;;13401:9;13395:4;13391:20;13387:1;13376:9;13372:17;13365:47;13429:131;13555:4;13429:131;:::i;:::-;13421:139;;13148:419;;;:::o;13573:182::-;13713:34;13709:1;13701:6;13697:14;13690:58;13573:182;:::o;13761:366::-;13903:3;13924:67;13988:2;13983:3;13924:67;:::i;:::-;13917:74;;14000:93;14089:3;14000:93;:::i;:::-;14118:2;14113:3;14109:12;14102:19;;13761:366;;;:::o;14133:419::-;14299:4;14337:2;14326:9;14322:18;14314:26;;14386:9;14380:4;14376:20;14372:1;14361:9;14357:17;14350:47;14414:131;14540:4;14414:131;:::i;:::-;14406:139;;14133:419;;;:::o;14558:181::-;14698:33;14694:1;14686:6;14682:14;14675:57;14558:181;:::o;14745:366::-;14887:3;14908:67;14972:2;14967:3;14908:67;:::i;:::-;14901:74;;14984:93;15073:3;14984:93;:::i;:::-;15102:2;15097:3;15093:12;15086:19;;14745:366;;;:::o;15117:419::-;15283:4;15321:2;15310:9;15306:18;15298:26;;15370:9;15364:4;15360:20;15356:1;15345:9;15341:17;15334:47;15398:131;15524:4;15398:131;:::i;:::-;15390:139;;15117:419;;;:::o;15542:148::-;15644:11;15681:3;15666:18;;15542:148;;;;:::o;15696:214::-;15836:66;15832:1;15824:6;15820:14;15813:90;15696:214;:::o;15916:402::-;16076:3;16097:85;16179:2;16174:3;16097:85;:::i;:::-;16090:92;;16191:93;16280:3;16191:93;:::i;:::-;16309:2;16304:3;16300:12;16293:19;;15916:402;;;:::o;16324:522::-;16537:3;16559:148;16703:3;16559:148;:::i;:::-;16552:155;;16717:75;16788:3;16779:6;16717:75;:::i;:::-;16817:2;16812:3;16808:12;16801:19;;16837:3;16830:10;;16324:522;;;;:::o;16852:118::-;16939:24;16957:5;16939:24;:::i;:::-;16934:3;16927:37;16852:118;;:::o;16976:85::-;17021:7;17050:5;17039:16;;16976:85;;;:::o;17067:60::-;17095:3;17116:5;17109:12;;17067:60;;;:::o;17133:158::-;17191:9;17224:61;17242:42;17251:32;17277:5;17251:32;:::i;:::-;17242:42;:::i;:::-;17224:61;:::i;:::-;17211:74;;17133:158;;;:::o;17297:147::-;17392:45;17431:5;17392:45;:::i;:::-;17387:3;17380:58;17297:147;;:::o;17450:168::-;17533:11;17567:6;17562:3;17555:19;17607:4;17602:3;17598:14;17583:29;;17450:168;;;;:::o;17624:362::-;17765:3;17786:65;17849:1;17844:3;17786:65;:::i;:::-;17779:72;;17860:93;17949:3;17860:93;:::i;:::-;17978:1;17973:3;17969:11;17962:18;;17624:362;;;:::o;17992:875::-;18277:4;18315:3;18304:9;18300:19;18292:27;;18329:71;18397:1;18386:9;18382:17;18373:6;18329:71;:::i;:::-;18410:72;18478:2;18467:9;18463:18;18454:6;18410:72;:::i;:::-;18492;18560:2;18549:9;18545:18;18536:6;18492:72;:::i;:::-;18574:80;18650:2;18639:9;18635:18;18626:6;18574:80;:::i;:::-;18702:9;18696:4;18692:20;18686:3;18675:9;18671:19;18664:49;18730:130;18855:4;18730:130;:::i;:::-;18722:138;;17992:875;;;;;;;:::o;18873:146::-;18970:6;18965:3;18960;18947:30;19011:1;19002:6;18997:3;18993:16;18986:27;18873:146;;;:::o;19049:330::-;19165:3;19186:89;19268:6;19263:3;19186:89;:::i;:::-;19179:96;;19285:56;19334:6;19329:3;19322:5;19285:56;:::i;:::-;19366:6;19361:3;19357:16;19350:23;;19049:330;;;;;:::o;19385:295::-;19527:3;19549:105;19650:3;19641:6;19633;19549:105;:::i;:::-;19542:112;;19671:3;19664:10;;19385:295;;;;;:::o;19686:332::-;19807:4;19845:2;19834:9;19830:18;19822:26;;19858:71;19926:1;19915:9;19911:17;19902:6;19858:71;:::i;:::-;19939:72;20007:2;19996:9;19992:18;19983:6;19939:72;:::i;:::-;19686:332;;;;;:::o;20024:180::-;20072:77;20069:1;20062:88;20169:4;20166:1;20159:15;20193:4;20190:1;20183:15;20210:174;20350:26;20346:1;20338:6;20334:14;20327:50;20210:174;:::o;20390:366::-;20532:3;20553:67;20617:2;20612:3;20553:67;:::i;:::-;20546:74;;20629:93;20718:3;20629:93;:::i;:::-;20747:2;20742:3;20738:12;20731:19;;20390:366;;;:::o;20762:419::-;20928:4;20966:2;20955:9;20951:18;20943:26;;21015:9;21009:4;21005:20;21001:1;20990:9;20986:17;20979:47;21043:131;21169:4;21043:131;:::i;:::-;21035:139;;20762:419;;;:::o;21187:181::-;21327:33;21323:1;21315:6;21311:14;21304:57;21187:181;:::o;21374:366::-;21516:3;21537:67;21601:2;21596:3;21537:67;:::i;:::-;21530:74;;21613:93;21702:3;21613:93;:::i;:::-;21731:2;21726:3;21722:12;21715:19;;21374:366;;;:::o;21746:419::-;21912:4;21950:2;21939:9;21935:18;21927:26;;21999:9;21993:4;21989:20;21985:1;21974:9;21970:17;21963:47;22027:131;22153:4;22027:131;:::i;:::-;22019:139;;21746:419;;;:::o;22171:221::-;22311:34;22307:1;22299:6;22295:14;22288:58;22380:4;22375:2;22367:6;22363:15;22356:29;22171:221;:::o;22398:366::-;22540:3;22561:67;22625:2;22620:3;22561:67;:::i;:::-;22554:74;;22637:93;22726:3;22637:93;:::i;:::-;22755:2;22750:3;22746:12;22739:19;;22398:366;;;:::o;22770:419::-;22936:4;22974:2;22963:9;22959:18;22951:26;;23023:9;23017:4;23013:20;23009:1;22998:9;22994:17;22987:47;23051:131;23177:4;23051:131;:::i;:::-;23043:139;;22770:419;;;:::o;23195:226::-;23335:34;23331:1;23323:6;23319:14;23312:58;23404:9;23399:2;23391:6;23387:15;23380:34;23195:226;:::o;23427:366::-;23569:3;23590:67;23654:2;23649:3;23590:67;:::i;:::-;23583:74;;23666:93;23755:3;23666:93;:::i;:::-;23784:2;23779:3;23775:12;23768:19;;23427:366;;;:::o;23799:419::-;23965:4;24003:2;23992:9;23988:18;23980:26;;24052:9;24046:4;24042:20;24038:1;24027:9;24023:17;24016:47;24080:131;24206:4;24080:131;:::i;:::-;24072:139;;23799:419;;;:::o;24224:180::-;24272:77;24269:1;24262:88;24369:4;24366:1;24359:15;24393:4;24390:1;24383:15;24410:213;24449:3;24468:19;24485:1;24468:19;:::i;:::-;24463:24;;24501:19;24518:1;24501:19;:::i;:::-;24496:24;;24543:1;24540;24536:9;24529:16;;24566:26;24561:3;24558:35;24555:61;;;24596:18;;:::i;:::-;24555:61;24410:213;;;;:::o;24629:118::-;24716:24;24734:5;24716:24;:::i;:::-;24711:3;24704:37;24629:118;;:::o;24753:86::-;24788:7;24828:4;24821:5;24817:16;24806:27;;24753:86;;;:::o;24845:112::-;24928:22;24944:5;24928:22;:::i;:::-;24923:3;24916:35;24845:112;;:::o;24963:545::-;25136:4;25174:3;25163:9;25159:19;25151:27;;25188:71;25256:1;25245:9;25241:17;25232:6;25188:71;:::i;:::-;25269:68;25333:2;25322:9;25318:18;25309:6;25269:68;:::i;:::-;25347:72;25415:2;25404:9;25400:18;25391:6;25347:72;:::i;:::-;25429;25497:2;25486:9;25482:18;25473:6;25429:72;:::i;:::-;24963:545;;;;;;;:::o
Swarm Source
ipfs://6451edb234fcaa935f9d15016d14bd7c6cde8a1b6f9a89dcb11018b873ec0235
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.