Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 3,683 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Deploy New Handl... | 10462011 | 2049 days ago | IN | 0 ETH | 0.00781946 | ||||
| Deploy New Handl... | 10462011 | 2049 days ago | IN | 0 ETH | 0.00781946 | ||||
| Deploy New Handl... | 10462011 | 2049 days ago | IN | 0 ETH | 0.00781946 | ||||
| Deploy New Handl... | 10462010 | 2049 days ago | IN | 0 ETH | 0.00781946 | ||||
| Deploy New Handl... | 10462009 | 2049 days ago | IN | 0 ETH | 0.00781946 | ||||
| Deploy New Handl... | 10462009 | 2049 days ago | IN | 0 ETH | 0.00781946 | ||||
| Deploy New Handl... | 10462009 | 2049 days ago | IN | 0 ETH | 0.00781946 | ||||
| Deploy New Handl... | 10462009 | 2049 days ago | IN | 0 ETH | 0.00781946 | ||||
| Deploy New Handl... | 10462007 | 2049 days ago | IN | 0 ETH | 0.00781946 | ||||
| Deploy New Handl... | 10462007 | 2049 days ago | IN | 0 ETH | 0.00781946 | ||||
| Deploy New Handl... | 10462007 | 2049 days ago | IN | 0 ETH | 0.00781946 | ||||
| Deploy New Handl... | 10462006 | 2049 days ago | IN | 0 ETH | 0.00739678 | ||||
| Deploy New Handl... | 10462006 | 2049 days ago | IN | 0 ETH | 0.00739678 | ||||
| Deploy New Handl... | 10462006 | 2049 days ago | IN | 0 ETH | 0.00739678 | ||||
| Deploy New Handl... | 10462006 | 2049 days ago | IN | 0 ETH | 0.00739678 | ||||
| Deploy New Handl... | 10462005 | 2049 days ago | IN | 0 ETH | 0.00739678 | ||||
| Deploy New Handl... | 10462005 | 2049 days ago | IN | 0 ETH | 0.00739678 | ||||
| Deploy New Handl... | 10462005 | 2049 days ago | IN | 0 ETH | 0.00739678 | ||||
| Deploy New Handl... | 10462004 | 2049 days ago | IN | 0 ETH | 0.00676277 | ||||
| Deploy New Handl... | 10462004 | 2049 days ago | IN | 0 ETH | 0.00676277 | ||||
| Deploy New Handl... | 10462004 | 2049 days ago | IN | 0 ETH | 0.00676277 | ||||
| Deploy New Handl... | 10462004 | 2049 days ago | IN | 0 ETH | 0.00676277 | ||||
| Deploy New Handl... | 10462004 | 2049 days ago | IN | 0 ETH | 0.00676277 | ||||
| Deploy New Handl... | 10462002 | 2049 days ago | IN | 0 ETH | 0.00676277 | ||||
| Deploy New Handl... | 10462002 | 2049 days ago | IN | 0 ETH | 0.00676277 |
Latest 25 internal transactions (View All)
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
PaymentMaster
Compiler Version
v0.5.16+commit.9c3226ce
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-07-14
*/
// Made in the Cloud by Tokensoft Inc
// Should be compiled with v0.5.16+commit.9c3226ce and no optimizations to match Etherscan verification.
// File: @openzeppelin/contracts/GSN/Context.sol
pragma solidity ^0.5.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 GSN 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.
*/
contract Context {
// Empty internal constructor, to prevent people from mistakenly deploying
// an instance of this contract, which should be used via inheritance.
constructor () internal { }
// solhint-disable-previous-line no-empty-blocks
function _msgSender() internal view returns (address payable) {
return msg.sender;
}
function _msgData() internal view returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File: @openzeppelin/contracts/ownership/Ownable.sol
pragma solidity ^0.5.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.
*
* 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.
*/
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 () internal {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(isOwner(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Returns true if the caller is the current owner.
*/
function isOwner() public view returns (bool) {
return _msgSender() == _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 onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = 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 onlyOwner {
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
*/
function _transferOwnership(address newOwner) internal {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
pragma solidity ^0.5.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP. Does not include
* the optional functions; to access them see {ERC20Detailed}.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// File: @openzeppelin/contracts/math/SafeMath.sol
pragma solidity ^0.5.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
* - Subtraction cannot overflow.
*
* _Available since v2.4.0._
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*
* _Available since v2.4.0._
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
* - The divisor cannot be zero.
*
* _Available since v2.4.0._
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
// File: @openzeppelin/contracts/utils/Address.sol
pragma solidity ^0.5.5;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @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) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly { codehash := extcodehash(account) }
return (codehash != accountHash && codehash != 0x0);
}
/**
* @dev Converts an `address` into `address payable`. Note that this is
* simply a type cast: the actual underlying value is not changed.
*
* _Available since v2.4.0._
*/
function toPayable(address account) internal pure returns (address payable) {
return address(uint160(account));
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*
* _Available since v2.4.0._
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-call-value
(bool success, ) = recipient.call.value(amount)("");
require(success, "Address: unable to send value, recipient may have reverted");
}
}
// File: @openzeppelin/contracts/token/ERC20/SafeERC20.sol
pragma solidity ^0.5.0;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves.
// A Solidity high level call has three parts:
// 1. The target address is checked to verify it contains contract code
// 2. The call itself is made, and success asserted
// 3. The return value is decoded, which in turn checks the size of the returned data.
// solhint-disable-next-line max-line-length
require(address(token).isContract(), "SafeERC20: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = address(token).call(data);
require(success, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
// File: contracts/PaymentHandler.sol
pragma solidity 0.5.16;
// import "./PaymentMaster.sol";
/**
* The payment handler is responsible for receiving payments.
* If the payment is in ETH, it auto forwards to its parent master's owner.
* If the payment is in ERC20, it holds the tokens until it is asked to sweep.
* It can only sweep ERC20s to the parent master's owner.
*/
contract PaymentHandler {
using SafeERC20 for IERC20;
// a boolean to track whether a Proxied instance of this contract has been initialized
bool public initialized = false;
// Keep track of the parent master contract - cannot be changed once set
PaymentMaster public master;
/**
* General constructor called by the master
*/
function initialize(PaymentMaster _master) public {
require(initialized == false, 'Contract is already initialized');
initialized = true;
master = _master;
}
/**
* Helper function to return the parent master's address
*/
function getMasterAddress() public view returns (address) {
return address(master);
}
/**
* Default payable function - forwards to the owner and triggers event
*/
function() external payable {
// Get the parent master's owner address - explicity convert to payable
address payable ownerAddress = address(uint160(master.owner()));
// Forward the funds to the owner
Address.sendValue(ownerAddress, msg.value);
// Trigger the event notification in the parent master
master.firePaymentReceivedEvent(address(this), msg.sender, msg.value);
}
/**
* Sweep any tokens to the owner of the master
*/
function sweepTokens(IERC20 token) public {
// Get the owner address
address ownerAddress = master.owner();
// Get the current balance
uint balance = token.balanceOf(address(this));
// Transfer to the owner
token.safeTransfer(ownerAddress, balance);
}
}
// File: contracts/Proxy.sol
pragma solidity 0.5.16;
contract Proxy {
// Code position in storage is keccak256("PROXIABLE") = "0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7"
// constructor(bytes memory constructData, address contractLogic) public {
constructor(address contractLogic) public {
// save the code address
assembly { // solium-disable-line
sstore(0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7, contractLogic)
}
}
function() external payable {
assembly { // solium-disable-line
let contractLogic := sload(0xc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7)
let ptr := mload(0x40)
calldatacopy(ptr, 0x0, calldatasize)
let success := delegatecall(gas, contractLogic, ptr, calldatasize, 0, 0)
let retSz := returndatasize
returndatacopy(ptr, 0, retSz)
switch success
case 0 {
revert(ptr, retSz)
}
default {
return(ptr, retSz)
}
}
}
}
// File: contracts/PaymentMaster.sol
pragma solidity 0.5.16;
/**
* The PaymentMaster sits above the payment handler contracts.
* It deploys and keeps track of all the handlers.
* It can trigger events by child handlers when they receive ETH.
* It allows ERC20 tokens to be swept in bulk to the owner account.
*/
contract PaymentMaster is Ownable {
using SafeERC20 for IERC20;
// payment handler logic contract address
address public handlerLogicAddress ;
// A list of handler addresses for retrieval
address[] public handlerList;
// A mapping of handler addresses for lookups
mapping(address => bool) public handlerMap;
// Events triggered for listeners
event HandlerCreated(address indexed _addr);
event EthPaymentReceived(address indexed _to, address indexed _from, uint256 _amount);
/** Deploy the payment handler logic contract */
constructor() public {
deployHandlerLogic();
}
/**
* Called by the constructor this function deploys an instance of the PaymentHandler
* that can be used by subsequent handler deployments via Proxy
*/
function deployHandlerLogic() internal {
// Deploy the new contract
PaymentHandler createdHandler = new PaymentHandler();
// initialize the deployed PaymentHandler
createdHandler.initialize(this);
// set the paymentHandlerLogicAddress
handlerLogicAddress = address(createdHandler);
}
/**
* Anyone can call the function to deploy a new payment handler.
* The new contract will be created, added to the list, and an event fired.
*/
function deployNewHandler() public {
// Deploy the new Proxy contract with the handler logic address
Proxy createdProxy = new Proxy(handlerLogicAddress);
// instantiate a PaymentHandler contract at the created Proxy address
PaymentHandler proxyHandler = PaymentHandler(address(createdProxy));
// initialize the Proxy with this contract's address
proxyHandler.initialize(this);
// Add it to the list and the mapping
handlerList.push(address(createdProxy));
handlerMap[address(createdProxy)] = true;
// Emit event to let watchers know that a new handler was created
emit HandlerCreated(address(createdProxy));
}
/**
* Allows caller to determine how long the handler list is for convenience
*/
function getHandlerListLength() public view returns (uint) {
return handlerList.length;
}
/**
* This function is called by handlers when they receive ETH payments.
*/
function firePaymentReceivedEvent(address to, address from, uint256 amount) public {
// Verify the call is coming from a handler
require(handlerMap[msg.sender], "Only payment handlers are allowed to trigger payment events.");
// Emit the event
emit EthPaymentReceived(to, from, amount);
}
/**
* Allows a caller to sweep multiple handlers in one transaction
*/
function multiHandlerSweep(address[] memory handlers, IERC20 tokenContract) public {
for (uint i = 0; i < handlers.length; i++) {
// Whitelist calls to only handlers
require(handlerMap[handlers[i]], "Only payment handlers are valid sweep targets.");
// Trigger sweep
PaymentHandler(address(uint160(handlers[i]))).sweepTokens(tokenContract);
}
}
/**
* Safety function to allow sweep of ERC20s if accidentally sent to this contract
*/
function sweepTokens(IERC20 token) public {
// Get the current balance
uint balance = token.balanceOf(address(this));
// Transfer to the owner
token.safeTransfer(this.owner(), balance);
}
}
// MIT License
// Copyright (c) 2020 Tokensoft
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"EthPaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_addr","type":"address"}],"name":"HandlerCreated","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"},{"constant":false,"inputs":[],"name":"deployNewHandler","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"firePaymentReceivedEvent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getHandlerListLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"handlerList","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"handlerLogicAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"handlerMap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"handlers","type":"address[]"},{"internalType":"contract IERC20","name":"tokenContract","type":"address"}],"name":"multiHandlerSweep","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"sweepTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b5060006100216100d260201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506100cd6100da60201b60201c565b6101f0565b600033905090565b60006040516100e8906101e2565b604051809103906000f080158015610104573d6000803e3d6000fd5b5090508073ffffffffffffffffffffffffffffffffffffffff1663c4d66de8306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561018657600080fd5b505af115801561019a573d6000803e3d6000fd5b5050505080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610bbe80620015d183390190565b6113d180620002006000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063a453b36a11610071578063a453b36a14610281578063a7f06819146102ef578063adbbea011461035d578063bb33be5814610367578063f2fde38b146103b1578063f5f6d3af146103f5576100b4565b80630767abb8146100b957806323e776d3146101915780634592e804146101af578063715018a61461020b5780638da5cb5b146102155780638f32d59b1461025f575b600080fd5b61018f600480360360408110156100cf57600080fd5b81019080803590602001906401000000008111156100ec57600080fd5b8201836020820111156100fe57600080fd5b8035906020019184602083028401116401000000008311171561012057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610439565b005b6101996105b9565b6040518082815260200191505060405180910390f35b6101f1600480360360208110156101c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105c6565b604051808215151515815260200191505060405180910390f35b6102136105e6565b005b61021d61071f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610267610748565b604051808215151515815260200191505060405180910390f35b6102ad6004803603602081101561029757600080fd5b81019080803590602001909291905050506107a6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61035b6004803603606081101561030557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107e2565b005b6103656108ee565b005b61036f610b15565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103f3600480360360208110156103c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b3b565b005b6104376004803603602081101561040b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bc1565b005b60008090505b82518110156105b4576003600084838151811061045857fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166104fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180611345602e913960400191505060405180910390fd5b82818151811061050957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663f5f6d3af836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b50505050808060010191505061043f565b505050565b6000600280549050905090565b60036020528060005260406000206000915054906101000a900460ff1681565b6105ee610748565b610660576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661078a610d2c565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600281815481106107b357fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c8152602001806112e3603c913960400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f70b67bbcbad3ba1d594851292e63d6c097ecab60959bc60ee58beb4a1c22c9ad836040518082815260200191505060405180910390a3505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161091f906111df565b808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f080158015610971573d6000803e3d6000fd5b50905060008190508073ffffffffffffffffffffffffffffffffffffffff1663c4d66de8306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156109f857600080fd5b505af1158015610a0c573d6000803e3d6000fd5b5050505060028290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fef16b2ba030a7be9f6d0b1961285ee1b06631fc3a5bc49b1c9c3ed6a6018a22060405160405180910390a25050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b43610748565b610bb5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610bbe81610d34565b50565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610c4057600080fd5b505afa158015610c54573d6000803e3d6000fd5b505050506040513d6020811015610c6a57600080fd5b81019080805190602001909291905050509050610d283073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610cc657600080fd5b505afa158015610cda573d6000803e3d6000fd5b505050506040513d6020811015610cf057600080fd5b8101908080519060200190929190505050828473ffffffffffffffffffffffffffffffffffffffff16610e789092919063ffffffff16565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061131f6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610f44838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610f49565b505050565b610f688273ffffffffffffffffffffffffffffffffffffffff16611194565b610fda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083106110295780518252602082019150602081019050602083039250611006565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461108b576040519150601f19603f3d011682016040523d82523d6000602084013e611090565b606091505b509150915081611108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b60008151111561118e5780806020019051602081101561112757600080fd5b810190808051906020019092919050505061118d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611373602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156111d657506000801b8214155b92505050919050565b60f7806111ec8339019056fe608060405234801561001057600080fd5b506040516100f73803806100f78339818101604052602081101561003357600080fd5b8101908080519060200190929190505050807fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf755506081806100766000396000f3fe60806040527fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf75460405136600082376000803683855af43d806000843e81600081146048578184f35b8184fdfea265627a7a723158204eada0de64d77f721bf1e645815dc802bbe9465fa50425646d0dfcecbf49d7c564736f6c634300051000324f6e6c79207061796d656e742068616e646c6572732061726520616c6c6f77656420746f2074726967676572207061796d656e74206576656e74732e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f6e6c79207061796d656e742068616e646c657273206172652076616c696420737765657020746172676574732e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a723158208653de596a1fb4d64dea4020fb970a3bc51c70280fbd12d6a2aecd31173b0a9c64736f6c63430005100032608060405260008060006101000a81548160ff02191690831515021790555034801561002a57600080fd5b50610b848061003a6000396000f3fe60806040526004361061004a5760003560e01c80630d25a141146101f2578063158ef93e14610249578063c4d66de814610278578063ee97f7f3146102c9578063f5f6d3af14610320575b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156100b357600080fd5b505afa1580156100c7573d6000803e3d6000fd5b505050506040513d60208110156100dd57600080fd5b810190808051906020019092919050505090506100fa8134610371565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a7f068193033346040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156101d757600080fd5b505af11580156101eb573d6000803e3d6000fd5b5050505050005b3480156101fe57600080fd5b506102076104ab565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025557600080fd5b5061025e6104d4565b604051808215151515815260200191505060405180910390f35b34801561028457600080fd5b506102c76004803603602081101561029b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506104e6565b005b3480156102d557600080fd5b506102de6105cc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561032c57600080fd5b5061036f6004803603602081101561034357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105f2565b005b804710156103e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a20696e73756666696369656e742062616c616e636500000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405180600001905060006040518083038185875af1925050503d8060008114610447576040519150601f19603f3d011682016040523d82523d6000602084013e61044c565b606091505b50509050806104a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180610aec603a913960400191505060405180910390fd5b505050565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000809054906101000a900460ff1681565b600015156000809054906101000a900460ff1615151461056e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e747261637420697320616c726561647920696e697469616c697a65640081525060200191505060405180910390fd5b60016000806101000a81548160ff02191690831515021790555080600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561065b57600080fd5b505afa15801561066f573d6000803e3d6000fd5b505050506040513d602081101561068557600080fd5b8101908080519060200190929190505050905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561071757600080fd5b505afa15801561072b573d6000803e3d6000fd5b505050506040513d602081101561074157600080fd5b8101908080519060200190929190505050905061077f82828573ffffffffffffffffffffffffffffffffffffffff166107849092919063ffffffff16565b505050565b610850838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610855565b505050565b6108748273ffffffffffffffffffffffffffffffffffffffff16610aa0565b6108e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083106109355780518252602082019150602081019050602083039250610912565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610997576040519150601f19603f3d011682016040523d82523d6000602084013e61099c565b606091505b509150915081610a14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115610a9a57808060200190516020811015610a3357600080fd5b8101908080519060200190929190505050610a99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180610b26602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f9150808214158015610ae257506000801b8214155b9250505091905056fe416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d617920686176652072657665727465645361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a72315820eb45ce6bd089fc47bb0b465628198c8adb2e670573e59d6a4e3cd3548ee7206364736f6c63430005100032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100b45760003560e01c8063a453b36a11610071578063a453b36a14610281578063a7f06819146102ef578063adbbea011461035d578063bb33be5814610367578063f2fde38b146103b1578063f5f6d3af146103f5576100b4565b80630767abb8146100b957806323e776d3146101915780634592e804146101af578063715018a61461020b5780638da5cb5b146102155780638f32d59b1461025f575b600080fd5b61018f600480360360408110156100cf57600080fd5b81019080803590602001906401000000008111156100ec57600080fd5b8201836020820111156100fe57600080fd5b8035906020019184602083028401116401000000008311171561012057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610439565b005b6101996105b9565b6040518082815260200191505060405180910390f35b6101f1600480360360208110156101c557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105c6565b604051808215151515815260200191505060405180910390f35b6102136105e6565b005b61021d61071f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610267610748565b604051808215151515815260200191505060405180910390f35b6102ad6004803603602081101561029757600080fd5b81019080803590602001909291905050506107a6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61035b6004803603606081101561030557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506107e2565b005b6103656108ee565b005b61036f610b15565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103f3600480360360208110156103c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b3b565b005b6104376004803603602081101561040b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bc1565b005b60008090505b82518110156105b4576003600084838151811061045857fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166104fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180611345602e913960400191505060405180910390fd5b82818151811061050957fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663f5f6d3af836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b15801561058f57600080fd5b505af11580156105a3573d6000803e3d6000fd5b50505050808060010191505061043f565b505050565b6000600280549050905090565b60036020528060005260406000206000915054906101000a900460ff1681565b6105ee610748565b610660576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661078a610d2c565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600281815481106107b357fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c8152602001806112e3603c913960400191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f70b67bbcbad3ba1d594851292e63d6c097ecab60959bc60ee58beb4a1c22c9ad836040518082815260200191505060405180910390a3505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161091f906111df565b808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f080158015610971573d6000803e3d6000fd5b50905060008190508073ffffffffffffffffffffffffffffffffffffffff1663c4d66de8306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156109f857600080fd5b505af1158015610a0c573d6000803e3d6000fd5b5050505060028290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fef16b2ba030a7be9f6d0b1961285ee1b06631fc3a5bc49b1c9c3ed6a6018a22060405160405180910390a25050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b43610748565b610bb5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610bbe81610d34565b50565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610c4057600080fd5b505afa158015610c54573d6000803e3d6000fd5b505050506040513d6020811015610c6a57600080fd5b81019080805190602001909291905050509050610d283073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610cc657600080fd5b505afa158015610cda573d6000803e3d6000fd5b505050506040513d6020811015610cf057600080fd5b8101908080519060200190929190505050828473ffffffffffffffffffffffffffffffffffffffff16610e789092919063ffffffff16565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061131f6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610f44838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610f49565b505050565b610f688273ffffffffffffffffffffffffffffffffffffffff16611194565b610fda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b602083106110295780518252602082019150602081019050602083039250611006565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461108b576040519150601f19603f3d011682016040523d82523d6000602084013e611090565b606091505b509150915081611108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b60008151111561118e5780806020019051602081101561112757600080fd5b810190808051906020019092919050505061118d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611373602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91508082141580156111d657506000801b8214155b92505050919050565b60f7806111ec8339019056fe608060405234801561001057600080fd5b506040516100f73803806100f78339818101604052602081101561003357600080fd5b8101908080519060200190929190505050807fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf755506081806100766000396000f3fe60806040527fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf75460405136600082376000803683855af43d806000843e81600081146048578184f35b8184fdfea265627a7a723158204eada0de64d77f721bf1e645815dc802bbe9465fa50425646d0dfcecbf49d7c564736f6c634300051000324f6e6c79207061796d656e742068616e646c6572732061726520616c6c6f77656420746f2074726967676572207061796d656e74206576656e74732e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f6e6c79207061796d656e742068616e646c657273206172652076616c696420737765657020746172676574732e5361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a265627a7a723158208653de596a1fb4d64dea4020fb970a3bc51c70280fbd12d6a2aecd31173b0a9c64736f6c63430005100032
Deployed Bytecode Sourcemap
22580:3245:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22580:3245:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25146:372;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25146:372:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;25146:372:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;25146:372:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25146:372:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;25146:372:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24574:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22865:42;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22865:42:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3114:140;;;:::i;:::-;;2303:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2669:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22783:28;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22783:28:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24758:304;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24758:304:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23828:652;;;:::i;:::-;;22694:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3409:109;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3409:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;25619:203;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25619:203:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;25146:372;25239:6;25248:1;25239:10;;25234:280;25255:8;:15;25251:1;:19;25234:280;;;25333:10;:23;25344:8;25353:1;25344:11;;;;;;;;;;;;;;25333:23;;;;;;;;;;;;;;;;;;;;;;;;;25325:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25467:8;25476:1;25467:11;;;;;;;;;;;;;;25436:57;;;25494:13;25436:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25436:72:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25436:72:0;;;;25272:3;;;;;;;25234:280;;;;25146:372;;:::o;24574:94::-;24627:4;24645:11;:18;;;;24638:25;;24574:94;:::o;22865:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;3114:140::-;2515:9;:7;:9::i;:::-;2507:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3213:1;3176:40;;3197:6;;;;;;;;;;;3176:40;;;;;;;;;;;;3244:1;3227:6;;:19;;;;;;;;;;;;;;;;;;3114:140::o;2303:79::-;2341:7;2368:6;;;;;;;;;;;2361:13;;2303:79;:::o;2669:94::-;2709:4;2749:6;;;;;;;;;;;2733:22;;:12;:10;:12::i;:::-;:22;;;2726:29;;2669:94;:::o;22783:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24758:304::-;24901:10;:22;24912:10;24901:22;;;;;;;;;;;;;;;;;;;;;;;;;24893:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25044:4;25021:36;;25040:2;25021:36;;;25050:6;25021:36;;;;;;;;;;;;;;;;;;24758:304;;;:::o;23828:652::-;23935:18;23966:19;;;;;;;;;;;23956:30;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23956:30:0;23935:51;;24066:27;24119:12;24066:67;;24196:12;:23;;;24220:4;24196:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24196:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24196:29:0;;;;24273:11;24298:12;24273:39;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;24273:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24353:4;24317:10;:33;24336:12;24317:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;24461:12;24438:37;;;;;;;;;;;;23828:652;;:::o;22694:34::-;;;;;;;;;;;;;:::o;3409:109::-;2515:9;:7;:9::i;:::-;2507:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3482:28;3501:8;3482:18;:28::i;:::-;3409:109;:::o;25619:203::-;25696:12;25711:5;:15;;;25735:4;25711:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25711:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25711:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25711:30:0;;;;;;;;;;;;;;;;25696:45;;25776:41;25795:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25795:12:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25795:12:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25795:12:0;;;;;;;;;;;;;;;;25809:7;25776:5;:18;;;;:41;;;;;:::i;:::-;25619:203;;:::o;1009:98::-;1054:15;1089:10;1082:17;;1009:98;:::o;3624:229::-;3718:1;3698:22;;:8;:22;;;;3690:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3808:8;3779:38;;3800:6;;;;;;;;;;;3779:38;;;;;;;;;;;;3837:8;3828:6;;:17;;;;;;;;;;;;;;;;;;3624:229;:::o;15984:176::-;16067:85;16086:5;16116;:14;;;:23;;;;16141:2;16145:5;16093:58;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16093:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;16093:58:0;16067:18;:85::i;:::-;15984:176;;;:::o;18023:1114::-;18627:27;18635:5;18627:25;;;:27::i;:::-;18619:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18764:12;18778:23;18813:5;18805:19;;18825:4;18805:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;18805:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;18763:67:0;;;;18849:7;18841:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18930:1;18910:10;:17;:21;18906:224;;;19052:10;19041:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19041:30:0;;;;;;;;;;;;;;;;19033:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18906:224;18023:1114;;;;:::o;13013:619::-;13073:4;13335:16;13362:19;13384:66;13362:88;;;;13553:7;13541:20;13529:32;;13593:11;13581:8;:23;;:42;;;;;13620:3;13608:15;;:8;:15;;13581:42;13573:51;;;;13013:619;;;:::o;22580:3245::-;;;;;;;;:::o
Swarm Source
bzzr://eb45ce6bd089fc47bb0b465628198c8adb2e670573e59d6a4e3cd3548ee72063
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.