Contract Overview
My Name Tag:
Not Available, login to update
Txn Hash |
Method
|
Block
|
From
|
To
|
Value | [Txn Fee] | |||
---|---|---|---|---|---|---|---|---|---|
0xd1cbfb324bf688049153044b39047212bbbcba5356f2d549c0b8dad2b617daa6 | Add Free Session... | 19674694 | 618 days 15 hrs ago | Animoca: Deployer | IN | 0x069895fda566d0364abec6e290bee3d565c55666 | 0 MATIC | 0.000029346029 | |
0xea7eac77fabfce71e4bbc787b5a00b9187644c3d312804ad8c92ef9d7e7f4862 | Set Session Pric... | 17862168 | 668 days 15 hrs ago | Animoca: Deployer | IN | 0x069895fda566d0364abec6e290bee3d565c55666 | 0 MATIC | 0.0004649 | |
0xb09e8b3063a7c49338b7a5579589564eccf86c34640d14d39e9fce0dec342fe6 | Add Free Session... | 17824528 | 669 days 16 hrs ago | Animoca: Deployer | IN | 0x069895fda566d0364abec6e290bee3d565c55666 | 0 MATIC | 0.00023223 | |
0xf6a36a856f0a4ac8d1a2c14418562dd522ed9d9cdc76fd2193679d8fea866350 | 0x60a06040 | 17824523 | 669 days 16 hrs ago | Animoca: Deployer | IN | Create: SessionsManager | 0 MATIC | 0.005292435 |
[ Download CSV Export ]
Contract Name:
SessionsManager
Compiler Version
v0.7.6+commit.7338295f
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-08-10 */ /** *Submitted for verification at polygonscan.com on 2021-07-28 */ // Sources flattened with hardhat v2.4.3 https://hardhat.org // File @animoca/ethereum-contracts-core-1.1.1/contracts/utils/types/[email protected] // SPDX-License-Identifier: MIT // Partially derived from OpenZeppelin: // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/406c83649bd6169fc1b578e08506d78f0873b276/contracts/utils/Address.sol pragma solidity >=0.7.6 <0.8.0; /** * @dev Upgrades the address type to check if it is a contract. */ library AddressIsContract { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } } // File @animoca/ethereum-contracts-core-1.1.1/contracts/utils/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20Wrapper * Wraps ERC20 functions to support non-standard implementations which do not return a bool value. * Calls to the wrapped functions revert only if they throw or if they return false. */ library ERC20Wrapper { using AddressIsContract for address; function wrappedTransfer( IWrappedERC20 token, address to, uint256 value ) internal { _callWithOptionalReturnData(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function wrappedTransferFrom( IWrappedERC20 token, address from, address to, uint256 value ) internal { _callWithOptionalReturnData(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function wrappedApprove( IWrappedERC20 token, address spender, uint256 value ) internal { _callWithOptionalReturnData(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function _callWithOptionalReturnData(IWrappedERC20 token, bytes memory callData) internal { address target = address(token); require(target.isContract(), "ERC20Wrapper: non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory data) = target.call(callData); if (success) { if (data.length != 0) { require(abi.decode(data, (bool)), "ERC20Wrapper: operation failed"); } } else { // revert using a standard revert message if (data.length == 0) { revert("ERC20Wrapper: operation failed"); } // revert using the revert message coming from the call assembly { let size := mload(data) revert(add(32, data), size) } } } } interface IWrappedERC20 { function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function approve(address spender, uint256 value) external returns (bool); } // File @animoca/ethereum-contracts-core-1.1.1/contracts/metatx/[email protected] pragma solidity >=0.7.6 <0.8.0; /* * 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. */ abstract contract ManagedIdentity { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { return msg.data; } } // File @animoca/ethereum-contracts-core-1.1.1/contracts/access/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC-173 Contract Ownership Standard * Note: the ERC-165 identifier for this interface is 0x7f5828d0 */ interface IERC173 { /** * Event emited when ownership of a contract changes. * @param previousOwner the previous owner. * @param newOwner the new owner. */ event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * Get the address of the owner * @return The address of the owner. */ function owner() external view returns (address); /** * Set the address of the new owner of the contract * Set newOwner to address(0) to renounce any ownership. * @dev Emits an {OwnershipTransferred} event. * @param newOwner The address of the new owner of the contract. Using the zero address means renouncing ownership. */ function transferOwnership(address newOwner) external; } // File @animoca/ethereum-contracts-core-1.1.1/contracts/access/[email protected] pragma solidity >=0.7.6 <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 ManagedIdentity, IERC173 { address internal _owner; /** * Initializes the contract, setting the deployer as the initial owner. * @dev Emits an {IERC173-OwnershipTransferred(address,address)} event. */ constructor(address owner_) { _owner = owner_; emit OwnershipTransferred(address(0), owner_); } /** * Gets the address of the current contract owner. */ function owner() public view virtual override returns (address) { return _owner; } /** * See {IERC173-transferOwnership(address)} * @dev Reverts if the sender is not the current contract owner. * @param newOwner the address of the new owner. Use the zero address to renounce the ownership. */ function transferOwnership(address newOwner) public virtual override { _requireOwnership(_msgSender()); _owner = newOwner; emit OwnershipTransferred(_owner, newOwner); } /** * @dev Reverts if `account` is not the contract owner. * @param account the account to test. */ function _requireOwnership(address account) internal virtual { require(account == this.owner(), "Ownable: not the owner"); } } // File @animoca/ethereum-contracts-core-1.1.1/contracts/utils/[email protected] pragma solidity >=0.7.6 <0.8.0; abstract contract Recoverable is ManagedIdentity, Ownable { using ERC20Wrapper for IWrappedERC20; /** * Extract ERC20 tokens which were accidentally sent to the contract to a list of accounts. * Warning: this function should be overriden for contracts which are supposed to hold ERC20 tokens * so that the extraction is limited to only amounts sent accidentally. * @dev Reverts if the sender is not the contract owner. * @dev Reverts if `accounts`, `tokens` and `amounts` do not have the same length. * @dev Reverts if one of `tokens` is does not implement the ERC20 transfer function. * @dev Reverts if one of the ERC20 transfers fail for any reason. * @param accounts the list of accounts to transfer the tokens to. * @param tokens the list of ERC20 token addresses. * @param amounts the list of token amounts to transfer. */ function recoverERC20s( address[] calldata accounts, address[] calldata tokens, uint256[] calldata amounts ) external virtual { _requireOwnership(_msgSender()); uint256 length = accounts.length; require(length == tokens.length && length == amounts.length, "Recov: inconsistent arrays"); for (uint256 i = 0; i != length; ++i) { IWrappedERC20(tokens[i]).wrappedTransfer(accounts[i], amounts[i]); } } /** * Extract ERC721 tokens which were accidentally sent to the contract to a list of accounts. * Warning: this function should be overriden for contracts which are supposed to hold ERC721 tokens * so that the extraction is limited to only tokens sent accidentally. * @dev Reverts if the sender is not the contract owner. * @dev Reverts if `accounts`, `contracts` and `amounts` do not have the same length. * @dev Reverts if one of `contracts` is does not implement the ERC721 transferFrom function. * @dev Reverts if one of the ERC721 transfers fail for any reason. * @param accounts the list of accounts to transfer the tokens to. * @param contracts the list of ERC721 contract addresses. * @param tokenIds the list of token ids to transfer. */ function recoverERC721s( address[] calldata accounts, address[] calldata contracts, uint256[] calldata tokenIds ) external virtual { _requireOwnership(_msgSender()); uint256 length = accounts.length; require(length == contracts.length && length == tokenIds.length, "Recov: inconsistent arrays"); for (uint256 i = 0; i != length; ++i) { IRecoverableERC721(contracts[i]).transferFrom(address(this), accounts[i], tokenIds[i]); } } } interface IRecoverableERC721 { /// See {IERC721-transferFrom(address,address,uint256)} function transferFrom( address from, address to, uint256 tokenId ) external; } // File @animoca/ethereum-contracts-core-1.1.1/contracts/payment/[email protected] pragma solidity >=0.7.6 <0.8.0; /** @title PayoutWallet @dev adds support for a payout wallet Note: . */ abstract contract PayoutWallet is ManagedIdentity, Ownable { event PayoutWalletSet(address payoutWallet_); address payable public payoutWallet; constructor(address owner, address payable payoutWallet_) Ownable(owner) { require(payoutWallet_ != address(0), "Payout: zero address"); payoutWallet = payoutWallet_; emit PayoutWalletSet(payoutWallet_); } function setPayoutWallet(address payable payoutWallet_) public { _requireOwnership(_msgSender()); require(payoutWallet_ != address(0), "Payout: zero address"); payoutWallet = payoutWallet_; emit PayoutWalletSet(payoutWallet); } } // File @animoca/ethereum-contracts-core-1.1.1/contracts/introspection/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; /** * @title ERC20 Token Standard, Receiver * See https://eips.ethereum.org/EIPS/eip-20 * Note: the ERC-165 identifier for this interface is 0x4fc35859. */ interface IERC20Receiver { /** * Handles the receipt of ERC20 tokens. * @param sender The initiator of the transfer. * @param from The address which transferred the tokens. * @param value The amount of tokens transferred. * @param data Optional additional data with no specified format. * @return bytes4 `bytes4(keccak256("onERC20Received(address,address,uint256,bytes)"))` */ function onERC20Received( address sender, address from, uint256 value, bytes calldata data ) external returns (bytes4); } // File @animoca/ethereum-contracts-assets-1.1.3/contracts/token/ERC20/[email protected] pragma solidity >=0.7.6 <0.8.0; abstract contract ERC20Receiver is IERC20Receiver, IERC165 { bytes4 internal constant _ERC20_RECEIVED = type(IERC20Receiver).interfaceId; bytes4 internal constant _ERC20_REJECTED = 0xffffffff; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId || interfaceId == type(IERC20Receiver).interfaceId; } } // File contracts/payment/SessionsManager.sol pragma solidity >=0.7.6 <0.8.0; /** * @title SessionsManager, a contract to register game sessions in REVV Racing. */ contract SessionsManager is Recoverable, ERC20Receiver, PayoutWallet { using ERC20Wrapper for IWrappedERC20; /** * Event emitted when a game session has been submitted. * @param account the address of the account which entered the session. * @param sessionId the session identifier provided by the server. * @param amount the amount of REVV paid for the session: 0 for a free session, the current session price otherwise. */ event Admission(address account, string sessionId, uint256 amount); IWrappedERC20 public immutable revvToken; uint256 public freeSessions; // the total number of free sessions for each account. uint256 public sessionPrice; // the current price for a single session. mapping(address => uint256) public freeSessionsUsed; // the number of free sessions used by account. constructor(IWrappedERC20 revvToken_, address payable payoutWallet) PayoutWallet(msg.sender, payoutWallet) { revvToken = revvToken_; } /** * Adds `amount` of free sessions. * @dev Reverts if the sender is not the contract owner. * @dev Reverts if the number of free sessions overflows. * @param amount the number of additional free sessions. */ function addFreeSessions(uint256 amount) external { _requireOwnership(_msgSender()); uint256 freeSessions_ = freeSessions; uint256 newFreeSessions = freeSessions_ + amount; require(newFreeSessions > freeSessions, "Sessions: sessions overflow"); freeSessions = newFreeSessions; } /** * Sets `price` as the new session price. Setting a zero price will prevent any session to be admitted. * @dev Reverts if the sender is not the contract owner. * @param price the new session price. */ function setSessionPrice(uint256 price) external { _requireOwnership(_msgSender()); sessionPrice = price; } /** * Registers a user to a game session. * This function is the entry point when doing a PolygonREVV `safeTransfer` or `safeTransferFrom` to this contract. * @dev Reverts if the function is called from another address than the PolygonREVV contract address. * @dev Reverts if the session price has not been set yet. * @dev Reverts if the received value is incorrect: must be the session price, or zero in case of a free session. * @dev Emits an `Admission` event. * @param from the initiator of the transfer. * @param value the amount of PolygonREVV received. * @param data ABI-encoded string representing the session id6. */ function onERC20Received( address, /*sender*/ address from, uint256 value, bytes calldata data ) external override returns (bytes4) { require(_msgSender() == address(revvToken), "Sessions: wrong token"); uint256 price = sessionPrice; require(price != 0, "Sessions: price not set"); uint256 userFreeSessions = freeSessionsUsed[from]; if (userFreeSessions < freeSessions) { require(value == 0, "Sessions: session is free"); freeSessionsUsed[from] = userFreeSessions + 1; // cannot overflow as user free sessions can never reach max uint256 } else { require(value == price, "Sessions: wrong price"); revvToken.wrappedTransfer(payoutWallet, value); } emit Admission(from, abi.decode(data, (string)), value); return _ERC20_RECEIVED; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IWrappedERC20","name":"revvToken_","type":"address"},{"internalType":"address payable","name":"payoutWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"string","name":"sessionId","type":"string"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Admission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"payoutWallet_","type":"address"}],"name":"PayoutWalletSet","type":"event"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addFreeSessions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"freeSessions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"freeSessionsUsed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onERC20Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payoutWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"recoverERC20s","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"address[]","name":"contracts","type":"address[]"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"recoverERC721s","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revvToken","outputs":[{"internalType":"contract IWrappedERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sessionPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"payoutWallet_","type":"address"}],"name":"setPayoutWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setSessionPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405234801561001057600080fd5b506040516112c03803806112c08339818101604052604081101561003357600080fd5b508051602090910151600080546001600160a01b03191633908117825560405190918391839182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b0381166100dc576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b600180546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f8559181900360200190a1505050606081901b6001600160601b0319166080526001600160a01b031661115461016c600039806105ee52806107cc5280610d9e52506111546000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638488bb4e1161008c578063c3666c3611610066578063c3666c36146103d4578063dd8c6478146104e8578063f2fde38b14610505578063f4b8c30d1461052b576100ea565b80638488bb4e1461038b5780638da5cb5b146103af578063b605d27d146103b7576100ea565b806321eef09c116100c857806321eef09c146101645780634fc358591461018a5780636b8f9c431461024f57806373c8a95814610277576100ea565b806301ffc9a7146100ef578063177f071a14610142578063213537981461015c575b600080fd5b61012e6004803603602081101561010557600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610533565b604080519115158252519081900360200190f35b61014a6105cc565b60408051918252519081900360200190f35b61014a6105d2565b61014a6004803603602081101561017a57600080fd5b50356001600160a01b03166105d8565b61021a600480360360808110156101a057600080fd5b6001600160a01b038235811692602081013590911691604082013591908101906080810160608201356401000000008111156101db57600080fd5b8201836020820111156101ed57600080fd5b8035906020019184600183028401116401000000008311171561020f57600080fd5b5090925090506105ea565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b6102756004803603602081101561026557600080fd5b50356001600160a01b031661097f565b005b6102756004803603606081101561028d57600080fd5b8101906020810181356401000000008111156102a857600080fd5b8201836020820111156102ba57600080fd5b803590602001918460208302840111640100000000831117156102dc57600080fd5b9193909290916020810190356401000000008111156102fa57600080fd5b82018360208201111561030c57600080fd5b8035906020019184602083028401116401000000008311171561032e57600080fd5b91939092909160208101903564010000000081111561034c57600080fd5b82018360208201111561035e57600080fd5b8035906020019184602083028401116401000000008311171561038057600080fd5b509092509050610a5c565b610393610b49565b604080516001600160a01b039092168252519081900360200190f35b610393610b58565b610275600480360360208110156103cd57600080fd5b5035610b67565b610275600480360360608110156103ea57600080fd5b81019060208101813564010000000081111561040557600080fd5b82018360208201111561041757600080fd5b8035906020019184602083028401116401000000008311171561043957600080fd5b91939092909160208101903564010000000081111561045757600080fd5b82018360208201111561046957600080fd5b8035906020019184602083028401116401000000008311171561048b57600080fd5b9193909290916020810190356401000000008111156104a957600080fd5b8201836020820111156104bb57600080fd5b803590602001918460208302840111640100000000831117156104dd57600080fd5b509092509050610b77565b610275600480360360208110156104fe57600080fd5b5035610cbf565b6102756004803603602081101561051b57600080fd5b50356001600160a01b0316610d2b565b610393610d9c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806105c657507fffffffff0000000000000000000000000000000000000000000000000000000082167f4fc3585900000000000000000000000000000000000000000000000000000000145b92915050565b60035481565b60025481565b60046020526000908152604090205481565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661061e610dc0565b6001600160a01b031614610679576040805162461bcd60e51b815260206004820152601560248201527f53657373696f6e733a2077726f6e6720746f6b656e0000000000000000000000604482015290519081900360640190fd5b600354806106ce576040805162461bcd60e51b815260206004820152601760248201527f53657373696f6e733a207072696365206e6f7420736574000000000000000000604482015290519081900360640190fd5b6001600160a01b038616600090815260046020526040902054600254811015610767578515610744576040805162461bcd60e51b815260206004820152601960248201527f53657373696f6e733a2073657373696f6e206973206672656500000000000000604482015290519081900360640190fd5b6001600160a01b03871660009081526004602052604090206001820190556107f5565b8186146107bb576040805162461bcd60e51b815260206004820152601560248201527f53657373696f6e733a2077726f6e672070726963650000000000000000000000604482015290519081900360640190fd5b6001546107f5906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911688610dc4565b7f4f6002f4105a164111bc48653a45996d2fee50168d529f765f5604c82f327d8a878686602081101561082757600080fd5b81019060208101813564010000000081111561084257600080fd5b82018360208201111561085457600080fd5b8035906020019184600183028401116401000000008311171561087657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050508860405180846001600160a01b0316815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156109165781810151838201526020016108fe565b50505050905090810190601f1680156109435780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1507f4fc3585900000000000000000000000000000000000000000000000000000000979650505050505050565b61098f61098a610dc0565b610e49565b6001600160a01b0381166109ea576040805162461bcd60e51b815260206004820152601460248201527f5061796f75743a207a65726f2061646472657373000000000000000000000000604482015290519081900360640190fd5b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116919091179182905560408051929091168252517fdd880d24a789958a6398c99c2e54ce31bc10a638cbc42f7dd34285479ae0f855916020908290030190a150565b610a6761098a610dc0565b848381148015610a7657508082145b610ac7576040805162461bcd60e51b815260206004820152601a60248201527f5265636f763a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60005b818114610b3f57610b37888883818110610ae057fe5b905060200201356001600160a01b0316858584818110610afc57fe5b90506020020135888885818110610b0f57fe5b905060200201356001600160a01b03166001600160a01b0316610dc49092919063ffffffff16565b600101610aca565b5050505050505050565b6001546001600160a01b031681565b6000546001600160a01b031690565b610b7261098a610dc0565b600355565b610b8261098a610dc0565b848381148015610b9157508082145b610be2576040805162461bcd60e51b815260206004820152601a60248201527f5265636f763a20696e636f6e73697374656e7420617272617973000000000000604482015290519081900360640190fd5b60005b818114610b3f57858582818110610bf857fe5b905060200201356001600160a01b03166001600160a01b03166323b872dd308a8a85818110610c2357fe5b905060200201356001600160a01b0316878786818110610c3f57fe5b905060200201356040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015610c9c57600080fd5b505af1158015610cb0573d6000803e3d6000fd5b50505050806001019050610be5565b610cca61098a610dc0565b600254818101818111610d24576040805162461bcd60e51b815260206004820152601b60248201527f53657373696f6e733a2073657373696f6e73206f766572666c6f770000000000604482015290519081900360640190fd5b6002555050565b610d3661098a610dc0565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383811691821780845560405192939116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610e44908490610f10565b505050565b306001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e8257600080fd5b505afa158015610e96573d6000803e3d6000fd5b505050506040513d6020811015610eac57600080fd5b50516001600160a01b03828116911614610f0d576040805162461bcd60e51b815260206004820152601660248201527f4f776e61626c653a206e6f7420746865206f776e657200000000000000000000604482015290519081900360640190fd5b50565b81610f236001600160a01b038216611118565b610f74576040805162461bcd60e51b815260206004820152601a60248201527f4552433230577261707065723a206e6f6e2d636f6e7472616374000000000000604482015290519081900360640190fd5b600080826001600160a01b0316846040518082805190602001908083835b60208310610fcf57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610f92565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611031576040519150601f19603f3d011682016040523d82523d6000602084013e611036565b606091505b509150915081156110b5578051156110b05780806020019051602081101561105d57600080fd5b50516110b0576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b611111565b8051611108576040805162461bcd60e51b815260206004820152601e60248201527f4552433230577261707065723a206f7065726174696f6e206661696c65640000604482015290519081900360640190fd5b80518082602001fd5b5050505050565b3b15159056fea2646970667358221220ac48185e77e2655c0fb76586b5cdcbe381e8d9fdb28d6066681b33e10b4623c864736f6c6343000706003300000000000000000000000070c006878a5a50ed185ac4c87d837633923de296000000000000000000000000090bbf17f57760293bb87d8d6c65ad886430a55f
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000070c006878a5a50ed185ac4c87d837633923de296000000000000000000000000090bbf17f57760293bb87d8d6c65ad886430a55f
-----Decoded View---------------
Arg [0] : revvToken_ (address): 0x70c006878a5a50ed185ac4c87d837633923de296
Arg [1] : payoutWallet (address): 0x090bbf17f57760293bb87d8d6c65ad886430a55f
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000070c006878a5a50ed185ac4c87d837633923de296
Arg [1] : 000000000000000000000000090bbf17f57760293bb87d8d6c65ad886430a55f
Deployed ByteCode Sourcemap
14001:3586:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13603:208;;;;;;;;;;;;;;;;-1:-1:-1;13603:208:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;14686:27;;;:::i;:::-;;;;;;;;;;;;;;;;14597;;;:::i;14765:51::-;;;;;;;;;;;;;;;;-1:-1:-1;14765:51:0;-1:-1:-1;;;;;14765:51:0;;:::i;16672:912::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16672:912:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16672:912:0;;-1:-1:-1;16672:912:0;-1:-1:-1;16672:912:0;:::i;:::-;;;;;;;;;;;;;;;;;;;11312:268;;;;;;;;;;;;;;;;-1:-1:-1;11312:268:0;-1:-1:-1;;;;;11312:268:0;;:::i;:::-;;8623:492;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8623:492:0;;-1:-1:-1;8623:492:0;-1:-1:-1;8623:492:0;:::i;11023:35::-;;;:::i;:::-;;;;-1:-1:-1;;;;;11023:35:0;;;;;;;;;;;;;;6762:96;;;:::i;15843:130::-;;;;;;;;;;;;;;;;-1:-1:-1;15843:130:0;;:::i;9941:522::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9941:522:0;;-1:-1:-1;9941:522:0;-1:-1:-1;9941:522:0;:::i;15274:328::-;;;;;;;;;;;;;;;;-1:-1:-1;15274:328:0;;:::i;7105:201::-;;;;;;;;;;;;;;;;-1:-1:-1;7105:201:0;-1:-1:-1;;;;;7105:201:0;;:::i;14548:40::-;;;:::i;13603:208::-;13688:4;13712:40;;;13727:25;13712:40;;:91;;-1:-1:-1;13756:47:0;;;13771:32;13756:47;13712:91;13705:98;13603:208;-1:-1:-1;;13603:208:0:o;14686:27::-;;;;:::o;14597:::-;;;;:::o;14765:51::-;;;;;;;;;;;;;:::o;16672:912::-;16837:6;16888:9;-1:-1:-1;;;;;16864:34:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;16864:34:0;;16856:68;;;;;-1:-1:-1;;;16856:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16951:12;;16982:10;16974:46;;;;;-1:-1:-1;;;16974:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17058:22:0;;17031:24;17058:22;;;:16;:22;;;;;;17114:12;;17095:31;;17091:383;;;17151:10;;17143:48;;;;;-1:-1:-1;;;17143:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17206:22:0;;;;;;:16;:22;;;;;17250:1;17231:20;;17206:45;;17091:383;;;17370:5;17361;:14;17353:48;;;;;-1:-1:-1;;;17353:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17442:12;;17416:46;;-1:-1:-1;;;;;17416:9:0;:25;;;17442:12;17456:5;17416:25;:46::i;:::-;17491:50;17501:4;17518;;17507:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17535:5;17491:50;;;;-1:-1:-1;;;;;17491:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13438:32:0;;16672:912;-1:-1:-1;;;;;;;16672:912:0:o;11312:268::-;11386:31;11404:12;:10;:12::i;:::-;11386:17;:31::i;:::-;-1:-1:-1;;;;;11436:27:0;;11428:60;;;;;-1:-1:-1;;;11428:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11499:12;:28;;;;-1:-1:-1;;;;;11499:28:0;;;;;;;;;;;11543:29;;;11559:12;;;;11543:29;;;;;;;;;;;;;11312:268;:::o;8623:492::-;8792:31;8810:12;:10;:12::i;8792:31::-;8851:8;8885:23;;;:51;;;;-1:-1:-1;8912:24:0;;;8885:51;8877:90;;;;;-1:-1:-1;;;8877:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8983:9;8978:130;9003:6;8998:1;:11;8978:130;;9031:65;9072:8;;9081:1;9072:11;;;;;;;;;;;;;-1:-1:-1;;;;;9072:11:0;9085:7;;9093:1;9085:10;;;;;;;;;;;;;9045:6;;9052:1;9045:9;;;;;;;;;;;;;-1:-1:-1;;;;;9045:9:0;-1:-1:-1;;;;;9031:40:0;;;:65;;;;;:::i;:::-;9011:3;;8978:130;;;;8623:492;;;;;;;:::o;11023:35::-;;;-1:-1:-1;;;;;11023:35:0;;:::o;6762:96::-;6817:7;6844:6;-1:-1:-1;;;;;6844:6:0;6762:96;:::o;15843:130::-;15903:31;15921:12;:10;:12::i;15903:31::-;15945:12;:20;15843:130::o;9941:522::-;10115:31;10133:12;:10;:12::i;10115:31::-;10174:8;10208:26;;;:55;;;;-1:-1:-1;10238:25:0;;;10208:55;10200:94;;;;;-1:-1:-1;;;10200:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10310:9;10305:151;10330:6;10325:1;:11;10305:151;;10377:9;;10387:1;10377:12;;;;;;;;;;;;;-1:-1:-1;;;;;10377:12:0;-1:-1:-1;;;;;10358:45:0;;10412:4;10419:8;;10428:1;10419:11;;;;;;;;;;;;;-1:-1:-1;;;;;10419:11:0;10432:8;;10441:1;10432:11;;;;;;;;;;;;;10358:86;;;;;;;;;;;;;-1:-1:-1;;;;;10358:86:0;;;;;;-1:-1:-1;;;;;10358:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10338:3;;;;;10305:151;;15274:328;15335:31;15353:12;:10;:12::i;15335:31::-;15401:12;;15450:22;;;15491:30;;;15483:70;;;;;-1:-1:-1;;;15483:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15564:12;:30;-1:-1:-1;;15274:328:0:o;7105:201::-;7185:31;7203:12;:10;:12::i;7185:31::-;7227:6;:17;;;;-1:-1:-1;;;;;7227:17:0;;;;;;;;;7260:38;;7227:17;;7281:6;;;7260:38;;7227:6;7260:38;7105:201;:::o;14548:40::-;;;:::o;4392:106::-;4480:10;4392:106;:::o;1993:229::-;2155:58;;;-1:-1:-1;;;;;2155:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2178:23;2155:58;;;2120:94;;2148:5;;2120:27;:94::i;:::-;1993:229;;;:::o;7437:138::-;7528:4;-1:-1:-1;;;;;7528:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7528:12:0;-1:-1:-1;;;;;7517:23:0;;;;;;7509:58;;;;;-1:-1:-1;;;7509:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;7437:138;:::o;2749:892::-;2875:5;2900:19;-1:-1:-1;;;;;2900:17:0;;;:19::i;:::-;2892:58;;;;;-1:-1:-1;;;2892:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3024:12;3038:17;3059:6;-1:-1:-1;;;;;3059:11:0;3071:8;3059:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3023:57;;;;3095:7;3091:543;;;3123:11;;:16;3119:124;;3179:4;3168:24;;;;;;;;;;;;;;;-1:-1:-1;3168:24:0;3160:67;;;;;-1:-1:-1;;;3160:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3091:543;;;3334:11;;3330:97;;3371:40;;;-1:-1:-1;;;3371:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3330:97;3558:4;3552:11;3603:4;3596;3592:2;3588:13;3581:27;3521:102;2749:892;;;;;:::o;1180:387::-;1503:20;1551:8;;;1180:387::o
Swarm Source
ipfs://ac48185e77e2655c0fb76586b5cdcbe381e8d9fdb28d6066681b33e10b4623c8
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.