Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 13 from a total of 13 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Deploy User Wall... | 19867798 | 670 days ago | IN | 0 ETH | 0.00083942 | ||||
| Deploy User Wall... | 18636477 | 842 days ago | IN | 0 ETH | 0.00410304 | ||||
| Deploy User Wall... | 18400377 | 875 days ago | IN | 0 ETH | 0.00207632 | ||||
| Deploy User Wall... | 18148996 | 910 days ago | IN | 0 ETH | 0.00107469 | ||||
| Deploy User Wall... | 17843581 | 953 days ago | IN | 0 ETH | 0.00238261 | ||||
| Deploy User Wall... | 17052742 | 1064 days ago | IN | 0 ETH | 0.00291871 | ||||
| Deploy User Wall... | 16918905 | 1083 days ago | IN | 0 ETH | 0.00259027 | ||||
| Deploy User Wall... | 16733258 | 1110 days ago | IN | 0 ETH | 0.0032718 | ||||
| Deploy User Wall... | 16598066 | 1129 days ago | IN | 0 ETH | 0.00210202 | ||||
| Deploy User Wall... | 16491018 | 1143 days ago | IN | 0 ETH | 0.0016641 | ||||
| Deploy User Wall... | 16433840 | 1151 days ago | IN | 0 ETH | 0.00215218 | ||||
| Deploy User Wall... | 16352374 | 1163 days ago | IN | 0 ETH | 0.00151247 | ||||
| Deploy User Wall... | 16234181 | 1179 days ago | IN | 0 ETH | 0.00473341 |
Latest 14 internal transactions
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| 0x602d6000 | 19867798 | 670 days ago | Contract Creation | 0 ETH | |||
| 0x602d6000 | 18636477 | 842 days ago | Contract Creation | 0 ETH | |||
| 0x602d6000 | 18400377 | 875 days ago | Contract Creation | 0 ETH | |||
| 0x602d6000 | 18148996 | 910 days ago | Contract Creation | 0 ETH | |||
| 0x602d6000 | 17843581 | 953 days ago | Contract Creation | 0 ETH | |||
| 0x602d6000 | 17052742 | 1064 days ago | Contract Creation | 0 ETH | |||
| 0x602d6000 | 16918905 | 1083 days ago | Contract Creation | 0 ETH | |||
| 0x602d6000 | 16733258 | 1110 days ago | Contract Creation | 0 ETH | |||
| 0x602d6000 | 16598066 | 1129 days ago | Contract Creation | 0 ETH | |||
| 0x602d6000 | 16491018 | 1143 days ago | Contract Creation | 0 ETH | |||
| 0x602d6000 | 16433840 | 1151 days ago | Contract Creation | 0 ETH | |||
| 0x602d6000 | 16352374 | 1163 days ago | Contract Creation | 0 ETH | |||
| 0x602d6000 | 16234181 | 1179 days ago | Contract Creation | 0 ETH | |||
| 0x60806040 | 16227044 | 1180 days ago | Contract Creation | 0 ETH |
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:
UserWalletFactory
Compiler Version
v0.7.4+commit.3f05b770
Optimization Enabled:
Yes with 1000000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.7.4;
pragma experimental ABIEncoderV2;
import '@openzeppelin/contracts/utils/Address.sol';
import './UserWallet.sol';
import './MinimalProxyFactory.sol';
contract UserWalletFactory is MinimalProxyFactory {
using Address for address;
address public immutable userWalletPrototype;
constructor() {
userWalletPrototype = address(new UserWallet());
}
function getBytecodeHash() public view returns(bytes32) {
return keccak256(_deployBytecode(userWalletPrototype));
}
function getUserWallet(address _user) public view returns(IUserWallet) {
address _predictedAddress = address(uint(keccak256(abi.encodePacked(
hex'ff',
address(this),
bytes32(uint(_user)),
keccak256(_deployBytecode(userWalletPrototype))
))));
if (_predictedAddress.isContract()) {
return IUserWallet(_predictedAddress);
}
return IUserWallet(0);
}
function deployUserWallet(address _w2w, address _referrer) external payable {
deployUserWalletFor(_w2w, msg.sender, _referrer);
}
function deployUserWalletFor(address _w2w, address _owner, address _referrer) public payable {
UserWallet _userWallet = UserWallet(
_deploy(userWalletPrototype, bytes32(uint(_owner)))
);
_userWallet.init{value: msg.value}(_w2w, _owner, _referrer);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
/**
* @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 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].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
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);
}// SPDX-License-Identifier: MIT
pragma solidity 0.7.4;
import '@openzeppelin/contracts/token/ERC20/IERC20.sol';
import './Constants.sol';
import './IUserWallet.sol';
import './ParamsLib.sol';
import './SafeERC20.sol';
contract UserWallet is IUserWallet, Constants {
using SafeERC20 for IERC20;
using ParamsLib for *;
mapping (bytes32 => bytes32) public override params;
event ParamUpdated(bytes32 _key, bytes32 _value);
modifier onlyW2wOrOwner () {
require(msg.sender == params[W2W].toAddress() || msg.sender == owner(), 'Only W2W or owner');
_;
}
modifier onlyOwner () {
require(msg.sender == owner(), 'Only owner');
_;
}
function init(address _w2w, address _owner, address _referrer) external payable {
require(owner() == address(0), 'Already initialized');
params[OWNER] = _owner.toBytes32();
params[W2W] = _w2w.toBytes32();
if (_referrer != address(0)) {
params[REFERRER] = _referrer.toBytes32();
}
}
function demandETH(address payable _recepient, uint _amount) external override onlyW2wOrOwner() {
_recepient.transfer(_amount);
}
function demandERC20(IERC20 _token, address _recepient, uint _amount) external override onlyW2wOrOwner() {
uint _thisBalance = _token.balanceOf(address(this));
if (_thisBalance < _amount) {
_token.safeTransferFrom(owner(), address(this), (_amount - _thisBalance), '');
}
_token.safeTransfer(_recepient, _amount, '');
}
function demandAll(IERC20[] calldata _tokens, address payable _recepient) external override onlyW2wOrOwner() {
for (uint _i = 0; _i < _tokens.length; _i++) {
IERC20 _token = _tokens[_i];
if (_token == ETH) {
_recepient.transfer(address(this).balance);
} else {
_token.safeTransfer(_recepient, _token.balanceOf(address(this)), '');
}
}
}
function demand(address payable _target, uint _value, bytes memory _data)
external override onlyW2wOrOwner() returns(bool, bytes memory) {
return _target.call{value: _value}(_data);
}
function owner() public view override returns(address payable) {
return params[OWNER].toAddress();
}
function changeParam(bytes32 _key, bytes32 _value) public onlyOwner() {
require(_key != REFERRER, 'Cannot update referrer');
params[_key] = _value;
emit ParamUpdated(_key, _value);
}
function changeOwner(address _newOwner) public {
changeParam(OWNER, _newOwner.toBytes32());
}
receive() payable external {}
}// SPDX-License-Identifier: MIT
pragma solidity 0.7.4;
pragma experimental ABIEncoderV2;
import '@openzeppelin/contracts/token/ERC20/IERC20.sol';
/**
* @notice Based on @openzeppelin SafeERC20.
* @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 IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
function safeTransfer(IERC20 token, address to, uint256 value, bytes memory errPrefix) internal {
require(_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)),
string(abi.encodePacked(errPrefix, 'ERC20 transfer failed')));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value, bytes memory errPrefix) internal {
require(_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)),
string(abi.encodePacked(errPrefix, 'ERC20 transferFrom failed')));
}
function safeApprove(IERC20 token, address spender, uint256 value, bytes memory errPrefix) internal {
if (_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value))) {
return;
}
require(_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0))
&& _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)),
string(abi.encodePacked(errPrefix, 'ERC20 approve failed')));
}
function _callOptionalReturn(IERC20 token, bytes memory data) private returns(bool) {
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = address(token).call(data);
if (!success) {
return false;
}
if (returndata.length >= 32) { // Return data is optional
return abi.decode(returndata, (bool));
}
// In a wierd case when return data is 1-31 bytes long - return false.
return returndata.length == 0;
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.7.4;
library ParamsLib {
function toBytes32(address _self) internal pure returns(bytes32) {
return bytes32(uint(_self));
}
function toAddress(bytes32 _self) internal pure returns(address payable) {
return address(uint(_self));
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.7.4;
pragma experimental ABIEncoderV2;
contract MinimalProxyFactory {
function _deployBytecode(address _prototype) internal pure returns(bytes memory) {
return abi.encodePacked(
hex'602d600081600a8239f3363d3d373d3d3d363d73',
_prototype,
hex'5af43d82803e903d91602b57fd5bf3'
);
}
function _deploy(address _prototype, bytes32 _salt) internal returns(address payable _result) {
bytes memory _bytecode = _deployBytecode(_prototype);
assembly {
_result := create2(0, add(_bytecode, 32), mload(_bytecode), _salt)
}
return _result;
}
}// SPDX-License-Identifier: MIT
pragma solidity 0.7.4;
import '@openzeppelin/contracts/token/ERC20/IERC20.sol';
interface IUserWallet {
function params(bytes32 _key) external view returns(bytes32);
function owner() external view returns(address payable);
function demandETH(address payable _recepient, uint _amount) external;
function demandERC20(IERC20 _token, address _recepient, uint _amount) external;
function demandAll(IERC20[] calldata _tokens, address payable _recepient) external;
function demand(address payable _target, uint _value, bytes memory _data)
external returns(bool, bytes memory);
}// SPDX-License-Identifier: MIT
pragma solidity 0.7.4;
import '@openzeppelin/contracts/token/ERC20/IERC20.sol';
contract Constants {
IERC20 constant ETH = IERC20(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);
bytes32 constant W2W = 'W2W';
bytes32 constant OWNER = 'OWNER';
bytes32 constant REFERRER = 'REFERRER';
}{
"remappings": [],
"optimizer": {
"enabled": true,
"runs": 1000000
},
"evmVersion": "istanbul",
"libraries": {},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_w2w","type":"address"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"deployUserWallet","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_w2w","type":"address"},{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"deployUserWalletFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getBytecodeHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserWallet","outputs":[{"internalType":"contract IUserWallet","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"userWalletPrototype","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60a060405234801561001057600080fd5b5060405161001d9061004f565b604051809103906000f080158015610039573d6000803e3d6000fd5b5060601b6001600160601b03191660805261005c565b611538806105fa83390190565b60805160601c61057261008860003980610105528061014752806101da528061029452506105726000f3fe60806040526004361061005a5760003560e01c80639ad54793116100435780639ad547931461009f578063af0760db146100bf578063d732d169146100d25761005a565b806311949f4d1461005f57806397a5c71514610074575b600080fd5b61007261006d36600461038f565b6100f4565b005b34801561008057600080fd5b50610089610103565b60405161009691906104e2565b60405180910390f35b3480156100ab57600080fd5b506100896100ba36600461036e565b610127565b6100726100cd3660046103c1565b6101d3565b3480156100de57600080fd5b506100e761028d565b6040516100969190610533565b6100ff8233836101d3565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000803073ffffffffffffffffffffffffffffffffffffffff841661016b7f00000000000000000000000000000000000000000000000000000000000000006102c4565b805160209182012060405161018294939201610403565b6040516020818303038152906040528051906020012060001c90506101bc8173ffffffffffffffffffffffffffffffffffffffff166102ed565b156101c85790506101ce565b60009150505b919050565b60006102157f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8516610329565b90508073ffffffffffffffffffffffffffffffffffffffff1663184b9559348686866040518563ffffffff1660e01b815260040161025593929190610503565b6000604051808303818588803b15801561026e57600080fd5b505af1158015610282573d6000803e3d6000fd5b505050505050505050565b60006102b87f00000000000000000000000000000000000000000000000000000000000000006102c4565b80519060200120905090565b6060816040516020016102d79190610466565b6040516020818303038152906040529050919050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061032157508115155b949350505050565b60006060610336846102c4565b9050828151602083016000f5949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101ce57600080fd5b60006020828403121561037f578081fd5b6103888261034a565b9392505050565b600080604083850312156103a1578081fd5b6103aa8361034a565b91506103b86020840161034a565b90509250929050565b6000806000606084860312156103d5578081fd5b6103de8461034a565b92506103ec6020850161034a565b91506103fa6040850161034a565b90509250925092565b7fff00000000000000000000000000000000000000000000000000000000000000815260609390931b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830191909152603582015260550190565b7f602d600081600a8239f3363d3d373d3d3d363d73000000000000000000000000815260609190911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660148201527f5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000602882015260370190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff93841681529183166020830152909116604082015260600190565b9081526020019056fea264697066735822122054ae3c91a0d36b7f2b113d8066febeb785583f6e2ae81ae2749136aa312918be64736f6c63430007040033608060405234801561001057600080fd5b50611518806100206000396000f3fe60806040526004361061009a5760003560e01c80638a436d501161006957806395d7bd661161004e57806395d7bd6614610394578063a6f9dae1146103da578063dc6ab5271461041a576100a1565b80638a436d50146103065780638da5cb5b14610356576100a1565b8063184b9559146100a657806319ecc185146100ed578063731278fe146101805780637bd635a0146101b0576100a1565b366100a157005b600080fd5b6100eb600480360360608110156100bc57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160409091013516610456565b005b3480156100f957600080fd5b506100eb6004803603604081101561011057600080fd5b81019060208101813564010000000081111561012b57600080fd5b82018360208201111561013d57600080fd5b8035906020019184602083028401116401000000008311171561015f57600080fd5b91935091503573ffffffffffffffffffffffffffffffffffffffff16610642565b34801561018c57600080fd5b506100eb600480360360408110156101a357600080fd5b5080359060200135610908565b3480156101bc57600080fd5b50610285600480360360608110156101d357600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359181019060608101604082013564010000000081111561021057600080fd5b82018360208201111561022257600080fd5b8035906020019184600183028401116401000000008311171561024457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610a87945050505050565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156102ca5781810151838201526020016102b2565b50505050905090810190601f1680156102f75780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561031257600080fd5b506100eb6004803603606081101561032957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610c90565b34801561036257600080fd5b5061036b610ecb565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156103a057600080fd5b506100eb600480360360408110156103b757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f26565b3480156103e657600080fd5b506100eb600480360360208110156103fd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611093565b34801561042657600080fd5b506104446004803603602081101561043d57600080fd5b50356110de565b60408051918252519081900360200190f35b6000610460610ecb565b73ffffffffffffffffffffffffffffffffffffffff16146104e257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f416c726561647920696e697469616c697a656400000000000000000000000000604482015290519081900360640190fd5b6105018273ffffffffffffffffffffffffffffffffffffffff166110f0565b7f4f574e455200000000000000000000000000000000000000000000000000000060009081526020527f936c48e82d51e2c3095d5ee7c520190336411695eb369c14511299e9b812b60f5561056b73ffffffffffffffffffffffffffffffffffffffff84166110f0565b7f573257000000000000000000000000000000000000000000000000000000000060009081526020527ff9ec63f04af6b2a854938b57e7d89215f6e755db8da16c1e0b200bbad08d10705573ffffffffffffffffffffffffffffffffffffffff81161561063d576105f18173ffffffffffffffffffffffffffffffffffffffff166110f0565b7f524546455252455200000000000000000000000000000000000000000000000060009081526020527ff94cae4f3b613c4bdec912f1a53aee32f2e9f71b5510c864324fdc0d091fff3f555b505050565b7f573257000000000000000000000000000000000000000000000000000000000060009081526020527ff9ec63f04af6b2a854938b57e7d89215f6e755db8da16c1e0b200bbad08d10705461069690611109565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061070157506106d2610ecb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61076c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f6e6c7920573257206f72206f776e6572000000000000000000000000000000604482015290519081900360640190fd5b60005b8281101561090257600084848381811061078557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff16905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156108345760405173ffffffffffffffffffffffffffffffffffffffff8416904780156108fc02916000818181858888f1935050505015801561082e573d6000803e3d6000fd5b506108f9565b6108f9838273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561089f57600080fd5b505afa1580156108b3573d6000803e3d6000fd5b505050506040513d60208110156108c957600080fd5b505160408051602081019091526000815273ffffffffffffffffffffffffffffffffffffffff851692919061110c565b5060010161076f565b50505050565b610910610ecb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109a957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f4f6e6c79206f776e657200000000000000000000000000000000000000000000604482015290519081900360640190fd5b7f5245464552524552000000000000000000000000000000000000000000000000821415610a3857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f43616e6e6f742075706461746520726566657272657200000000000000000000604482015290519081900360640190fd5b60008281526020818152604091829020839055815184815290810183905281517fa60588e3d0bf3eaba732e6f2729103998bc63e6b5658b4d8a33c0f3ec4fbfc17929181900390910190a15050565b7f5732570000000000000000000000000000000000000000000000000000000000600090815260208190527ff9ec63f04af6b2a854938b57e7d89215f6e755db8da16c1e0b200bbad08d107054606090610ae090611109565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610b4b5750610b1c610ecb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610bb657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f6e6c7920573257206f72206f776e6572000000000000000000000000000000604482015290519081900360640190fd5b8473ffffffffffffffffffffffffffffffffffffffff1684846040518082805190602001908083835b60208310610c1c57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610bdf565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610c7e576040519150601f19603f3d011682016040523d82523d6000602084013e610c83565b606091505b5091509150935093915050565b7f573257000000000000000000000000000000000000000000000000000000000060009081526020527ff9ec63f04af6b2a854938b57e7d89215f6e755db8da16c1e0b200bbad08d107054610ce490611109565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d4f5750610d20610ecb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610dba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f6e6c7920573257206f72206f776e6572000000000000000000000000000000604482015290519081900360640190fd5b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e2357600080fd5b505afa158015610e37573d6000803e3d6000fd5b505050506040513d6020811015610e4d57600080fd5b5051905081811015610e9757610e97610e64610ecb565b60408051602081019091526000815273ffffffffffffffffffffffffffffffffffffffff87169190309085870390611215565b6040805160208101909152600081526109029073ffffffffffffffffffffffffffffffffffffffff8616908590859061110c565b7f4f574e4552000000000000000000000000000000000000000000000000000000600090815260208190527f936c48e82d51e2c3095d5ee7c520190336411695eb369c14511299e9b812b60f54610f2190611109565b905090565b7f573257000000000000000000000000000000000000000000000000000000000060009081526020527ff9ec63f04af6b2a854938b57e7d89215f6e755db8da16c1e0b200bbad08d107054610f7a90611109565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610fe55750610fb6610ecb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61105057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f6e6c7920573257206f72206f776e6572000000000000000000000000000000604482015290519081900360640190fd5b60405173ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083906000818181858888f1935050505015801561063d573d6000803e3d6000fd5b6110db7f4f574e45520000000000000000000000000000000000000000000000000000006110d68373ffffffffffffffffffffffffffffffffffffffff166110f0565b610908565b50565b60006020819052908152604090205481565b73ffffffffffffffffffffffffffffffffffffffff1690565b90565b6111ad8463a9059cbb60e01b858560405160240161112b92919061143f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611296565b816040516020016111be919061138c565b6040516020818303038152906040529061120e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112059190611465565b60405180910390fd5b5050505050565b611236856323b872dd60e01b86868660405160240161112b9392919061140e565b8160405160200161124791906113cd565b6040516020818303038152906040529061128e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112059190611465565b505050505050565b60008060608473ffffffffffffffffffffffffffffffffffffffff16846040516112c09190611370565b6000604051808303816000865af19150503d80600081146112fd576040519150601f19603f3d011682016040523d82523d6000602084013e611302565b606091505b50915091508161131757600092505050611343565b602081511061133d57808060200190518101906113349190611349565b92505050611343565b51159150505b92915050565b60006020828403121561135a578081fd5b81518015158114611369578182fd5b9392505050565b600082516113828184602087016114b6565b9190910192915050565b6000825161139e8184602087016114b6565b7f4552433230207472616e73666572206661696c65640000000000000000000000920191825250601501919050565b600082516113df8184602087016114b6565b7f4552433230207472616e7366657246726f6d206661696c656400000000000000920191825250601901919050565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60006020825282518060208401526114848160408501602087016114b6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60005b838110156114d15781810151838201526020016114b9565b83811115610902575050600091015256fea26469706673582212207f0b16f4a35b14fff5acd73be4940976308216fc10d7b886a67b80d4526bc92264736f6c63430007040033
Deployed Bytecode
0x60806040526004361061005a5760003560e01c80639ad54793116100435780639ad547931461009f578063af0760db146100bf578063d732d169146100d25761005a565b806311949f4d1461005f57806397a5c71514610074575b600080fd5b61007261006d36600461038f565b6100f4565b005b34801561008057600080fd5b50610089610103565b60405161009691906104e2565b60405180910390f35b3480156100ab57600080fd5b506100896100ba36600461036e565b610127565b6100726100cd3660046103c1565b6101d3565b3480156100de57600080fd5b506100e761028d565b6040516100969190610533565b6100ff8233836101d3565b5050565b7f000000000000000000000000e54acea9ef88c6cf4f6529b1228bca0d5aa79bf081565b6000803073ffffffffffffffffffffffffffffffffffffffff841661016b7f000000000000000000000000e54acea9ef88c6cf4f6529b1228bca0d5aa79bf06102c4565b805160209182012060405161018294939201610403565b6040516020818303038152906040528051906020012060001c90506101bc8173ffffffffffffffffffffffffffffffffffffffff166102ed565b156101c85790506101ce565b60009150505b919050565b60006102157f000000000000000000000000e54acea9ef88c6cf4f6529b1228bca0d5aa79bf073ffffffffffffffffffffffffffffffffffffffff8516610329565b90508073ffffffffffffffffffffffffffffffffffffffff1663184b9559348686866040518563ffffffff1660e01b815260040161025593929190610503565b6000604051808303818588803b15801561026e57600080fd5b505af1158015610282573d6000803e3d6000fd5b505050505050505050565b60006102b87f000000000000000000000000e54acea9ef88c6cf4f6529b1228bca0d5aa79bf06102c4565b80519060200120905090565b6060816040516020016102d79190610466565b6040516020818303038152906040529050919050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061032157508115155b949350505050565b60006060610336846102c4565b9050828151602083016000f5949350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146101ce57600080fd5b60006020828403121561037f578081fd5b6103888261034a565b9392505050565b600080604083850312156103a1578081fd5b6103aa8361034a565b91506103b86020840161034a565b90509250929050565b6000806000606084860312156103d5578081fd5b6103de8461034a565b92506103ec6020850161034a565b91506103fa6040850161034a565b90509250925092565b7fff00000000000000000000000000000000000000000000000000000000000000815260609390931b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660018401526015830191909152603582015260550190565b7f602d600081600a8239f3363d3d373d3d3d363d73000000000000000000000000815260609190911b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660148201527f5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000602882015260370190565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff93841681529183166020830152909116604082015260600190565b9081526020019056fea264697066735822122054ae3c91a0d36b7f2b113d8066febeb785583f6e2ae81ae2749136aa312918be64736f6c63430007040033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 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.