Source Code
Latest 25 from a total of 146 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Stake Nfts | 23606946 | 31 days ago | IN | 0 ETH | 0.00000635 | ||||
| Stake Nfts | 22153754 | 234 days ago | IN | 0 ETH | 0.00082631 | ||||
| Stake Nfts | 22128056 | 237 days ago | IN | 0 ETH | 0.00020752 | ||||
| Stake Nfts | 22079334 | 244 days ago | IN | 0 ETH | 0.00007321 | ||||
| Stake Nfts | 22035409 | 250 days ago | IN | 0 ETH | 0.00003194 | ||||
| Stake Nfts | 22035403 | 250 days ago | IN | 0 ETH | 0.00002662 | ||||
| Stake Nfts | 22035374 | 250 days ago | IN | 0 ETH | 0.00003194 | ||||
| Stake Nfts | 22025962 | 252 days ago | IN | 0 ETH | 0.00004259 | ||||
| Stake Nfts | 21979184 | 258 days ago | IN | 0 ETH | 0.00006352 | ||||
| Stake Nfts | 21979172 | 258 days ago | IN | 0 ETH | 0.00006352 | ||||
| Stake Nfts | 21979169 | 258 days ago | IN | 0 ETH | 0.00006334 | ||||
| Stake Nfts | 21965211 | 260 days ago | IN | 0 ETH | 0.00024495 | ||||
| Stake Nfts | 21831691 | 279 days ago | IN | 0 ETH | 0.00064337 | ||||
| Unstake Nfts | 21673109 | 301 days ago | IN | 0 ETH | 0.01593033 | ||||
| Stake Nfts | 21578407 | 314 days ago | IN | 0 ETH | 0.00088684 | ||||
| Stake Nfts | 21461310 | 331 days ago | IN | 0 ETH | 0.00173849 | ||||
| Stake Nfts | 21460851 | 331 days ago | IN | 0 ETH | 0.00098632 | ||||
| Unstake Nfts | 21074210 | 385 days ago | IN | 0 ETH | 0.00154007 | ||||
| Unstake Nfts | 20555277 | 457 days ago | IN | 0 ETH | 0.00014225 | ||||
| Unstake Nfts | 20343444 | 487 days ago | IN | 0 ETH | 0.00086227 | ||||
| Unstake Nfts | 20343365 | 487 days ago | IN | 0 ETH | 0.00039899 | ||||
| Stake Nfts | 19445705 | 612 days ago | IN | 0 ETH | 0.00064436 | ||||
| Unstake Nfts | 18952198 | 681 days ago | IN | 0 ETH | 0.00142056 | ||||
| Unstake Nfts | 18951176 | 682 days ago | IN | 0 ETH | 0.00151776 | ||||
| Stake Nfts | 18489215 | 746 days ago | IN | 0 ETH | 0.0017292 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
WoAStaking
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// @author: @gizmolab_
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract WoAStaking is Ownable {
bool public stakingEnabled = false;
uint256 public totalStaked;
uint256 public baseReward = 5;
struct Stake {
address owner; // 32bits
uint128 timestamp; // 32bits
}
mapping(address => mapping(uint256 => Stake)) public vault;
mapping(address => mapping(address => uint256[])) public userStakeTokens;
mapping(address => bool) public isVaultContract;
mapping(address => uint256) public vaultMultiplier;
event NFTStaked(
address owner,
address tokenAddress,
uint256 tokenId,
uint256 value
);
event NFTUnstaked(
address owner,
address tokenAddress,
uint256 tokenId,
uint256 value
);
/*==============================================================
== User Staking Functions ==
==============================================================*/
function stakeNfts(address _contract, uint256[] calldata tokenIds)
external
{
require(stakingEnabled == true, "Staking is not enabled yet.");
require(isVaultContract[_contract] == true, "Contract not allowed");
IERC721 nftContract = IERC721(_contract);
for (uint256 i; i < tokenIds.length; i++) {
require(
nftContract.ownerOf(tokenIds[i]) == msg.sender,
"You do not own this token"
);
nftContract.transferFrom(msg.sender, address(this), tokenIds[i]);
vault[_contract][tokenIds[i]] = Stake(
msg.sender,
uint128(block.timestamp)
);
userStakeTokens[msg.sender][_contract].push(tokenIds[i]);
emit NFTStaked(msg.sender, _contract, tokenIds[i], block.timestamp);
totalStaked++;
}
}
function unstakeNfts(address _contract, uint256[] calldata tokenIds)
external
{
require(stakingEnabled == true, "Staking is not enabled yet.");
require(isVaultContract[_contract] == true, "Contract not allowed");
IERC721 nftContract = IERC721(_contract);
for (uint256 i; i < tokenIds.length; i++) {
bool isTokenOwner = false;
uint256 tokenIndex = 0;
for (
uint256 j;
j < userStakeTokens[msg.sender][_contract].length;
j++
) {
if (userStakeTokens[msg.sender][_contract][j] == tokenIds[i]) {
isTokenOwner = true;
tokenIndex = j;
}
}
require(isTokenOwner == true, "You do not own this Token");
nftContract.transferFrom(address(this), msg.sender, tokenIds[i]);
delete vault[_contract][tokenIds[i]];
totalStaked--;
userStakeTokens[msg.sender][_contract][
tokenIndex
] = userStakeTokens[msg.sender][_contract][
userStakeTokens[msg.sender][_contract].length - 1
];
userStakeTokens[msg.sender][_contract].pop();
emit NFTUnstaked(
msg.sender,
_contract,
tokenIds[i],
block.timestamp
);
}
}
/*==============================================================
== Public Get Functions ==
==============================================================*/
function getStakedTokens(address _user, address _contract)
external
view
returns (uint256[] memory)
{
return userStakeTokens[_user][_contract];
}
function getRewards(address _user, address[] calldata vaultContracts)
external
view
returns (uint256)
{
uint256 reward = 0;
uint256 i;
for (i = 0; i < vaultContracts.length; i++) {
reward += _calculateReward(_user, vaultContracts[i]);
}
return reward;
}
/*==============================================================
== Owner Functions ==
==============================================================*/
function addVault(address _contract, uint256 _multiplier) public onlyOwner {
require(isVaultContract[_contract] == false, "Contract already added");
isVaultContract[_contract] = true;
vaultMultiplier[_contract] = _multiplier;
}
function setStakingEnabled(bool _enabled) external onlyOwner {
stakingEnabled = _enabled;
}
function setBaseReward(uint256 _reward) external onlyOwner {
baseReward = _reward;
}
function setMultiplier(address _contract, uint256 _multiplier)
external
onlyOwner
{
require(isVaultContract[_contract] == true, "Contract not added");
vaultMultiplier[_contract] = _multiplier;
}
/*==============================================================
== Reward Calculate Functions ==
==============================================================*/
function _calculateReward(address _user, address _contract)
internal
view
returns (uint256)
{
uint256 reward = 0;
for (uint256 i; i < userStakeTokens[_user][_contract].length; i++) {
uint256 token = userStakeTokens[_user][_contract][i];
uint256 timeSinceStake = block.timestamp -
vault[_contract][token].timestamp;
uint256 rewardPerToken = baseReward * vaultMultiplier[_contract];
reward += timeSinceStake * rewardPerToken * 1e18;
}
return reward / 86400;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
* or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
* understand this adds an external call which potentially creates a reentrancy vulnerability.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NFTStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"NFTUnstaked","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"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"uint256","name":"_multiplier","type":"uint256"}],"name":"addVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"baseReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address[]","name":"vaultContracts","type":"address[]"}],"name":"getRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address","name":"_contract","type":"address"}],"name":"getStakedTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isVaultContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reward","type":"uint256"}],"name":"setBaseReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"uint256","name":"_multiplier","type":"uint256"}],"name":"setMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setStakingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstakeNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userStakeTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"vault","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint128","name":"timestamp","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vaultMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040526000805460ff60a01b19169055600560025534801561002257600080fd5b5061002c33610031565b610081565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611339806100906000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063817b1cd2116100a2578063e4aaccab11610071578063e4aaccab14610289578063f2fde38b1461029c578063f3d942ec146102af578063fd9d142a146102d2578063fe3d1354146102f257600080fd5b8063817b1cd21461023f5780638da5cb5b146102485780639df7d47514610263578063bce8567e1461027657600080fd5b80636372df6a116100e95780636372df6a146101e8578063715018a6146101fb5780637319d65c1461020357806373a08ad51461021657806376ad03bc1461023657600080fd5b80630373a23a1461011b5780631cfff51b146101305780633d8e846e146101595780633fa16d991461017a575b600080fd5b61012e6101293660046111ad565b610305565b005b60005461014490600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b61016c61016736600461110a565b610312565b604051908152602001610150565b6101c161018836600461115f565b6003602090815260009283526040808420909152908252902080546001909101546001600160a01b03909116906001600160801b031682565b604080516001600160a01b0390931683526001600160801b03909116602083015201610150565b61012e6101f636600461115f565b610376565b61012e610416565b61012e61021136600461115f565b61042a565b61016c61022436600461104f565b60066020526000908152604090205481565b61016c60025481565b61016c60015481565b6000546040516001600160a01b039091168152602001610150565b61012e61027136600461110a565b6104b0565b61012e61028436600461118b565b6108ef565b61012e61029736600461110a565b610915565b61012e6102aa36600461104f565b610cf7565b6101446102bd36600461104f565b60056020526000908152604090205460ff1681565b6102e56102e0366004611090565b610d70565b60405161015091906111c6565b61016c6103003660046110c9565b610de9565b61030d610e27565b600255565b600080805b8381101561036d5761034f86868684818110610335576103356112d8565b905060200201602081019061034a919061104f565b610e81565b610359908361120a565b91508061036581611291565b915050610317565b50949350505050565b61037e610e27565b6001600160a01b03821660009081526005602052604090205460ff16156103e55760405162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9858dd08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6001600160a01b039091166000908152600560209081526040808320805460ff191660011790556006909152902055565b61041e610e27565b6104286000610fb3565b565b610432610e27565b6001600160a01b03821660009081526005602052604090205460ff1615156001146104945760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081b9bdd08185919195960721b60448201526064016103dc565b6001600160a01b03909116600090815260066020526040902055565b600054600160a01b900460ff16151560011461050e5760405162461bcd60e51b815260206004820152601b60248201527f5374616b696e67206973206e6f7420656e61626c6564207965742e000000000060448201526064016103dc565b6001600160a01b03831660009081526005602052604090205460ff1615156001146105725760405162461bcd60e51b815260206004820152601460248201527310dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b60448201526064016103dc565b8260005b828110156108e85760008060005b3360009081526004602090815260408083206001600160a01b038c16845290915290205481101561062d578686858181106105c1576105c16112d8565b3360009081526004602090815260408083206001600160a01b038f1684528252909120805492909102939093013592915083908110610602576106026112d8565b9060005260206000200154141561061b57600192508091505b8061062581611291565b915050610584565b506001821515146106805760405162461bcd60e51b815260206004820152601960248201527f596f7520646f206e6f74206f776e207468697320546f6b656e0000000000000060448201526064016103dc565b836001600160a01b03166323b872dd30338989888181106106a3576106a36112d8565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b1580156106fa57600080fd5b505af115801561070e573d6000803e3d6000fd5b5050506001600160a01b0388166000908152600360205260408120915087878681811061073d5761073d6112d8565b60209081029290920135835250810191909152604001600090812080546001600160a01b0319168155600190810180546001600160801b03191690558054916107858361127a565b90915550503360009081526004602090815260408083206001600160a01b038b168452909152902080546107bb90600190611263565b815481106107cb576107cb6112d8565b60009182526020808320909101543383526004825260408084206001600160a01b038c1685529092529120805483908110610808576108086112d8565b60009182526020808320909101929092553381526004825260408082206001600160a01b038b16835290925220805480610844576108446112c2565b600190038181906000526020600020016000905590557f2cba55f1bc992f27ae3c165ae6392e6ccefcd891a59089721bf95afbb3976b72338888888781811061088f5761088f6112d8565b90506020020135426040516108cb94939291906001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b60405180910390a1505080806108e090611291565b915050610576565b5050505050565b6108f7610e27565b60008054911515600160a01b0260ff60a01b19909216919091179055565b600054600160a01b900460ff1615156001146109735760405162461bcd60e51b815260206004820152601b60248201527f5374616b696e67206973206e6f7420656e61626c6564207965742e000000000060448201526064016103dc565b6001600160a01b03831660009081526005602052604090205460ff1615156001146109d75760405162461bcd60e51b815260206004820152601460248201527310dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b60448201526064016103dc565b8260005b828110156108e857336001600160a01b038316636352211e868685818110610a0557610a056112d8565b905060200201356040518263ffffffff1660e01b8152600401610a2a91815260200190565b60206040518083038186803b158015610a4257600080fd5b505afa158015610a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7a9190611073565b6001600160a01b031614610ad05760405162461bcd60e51b815260206004820152601960248201527f596f7520646f206e6f74206f776e207468697320746f6b656e0000000000000060448201526064016103dc565b816001600160a01b03166323b872dd3330878786818110610af357610af36112d8565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b158015610b4a57600080fd5b505af1158015610b5e573d6000803e3d6000fd5b50506040805180820182523381526001600160801b0342166020808301919091526001600160a01b038a16600090815260039091529182209093509150868685818110610bad57610bad6112d8565b602090810292909201358352508181019290925260409081016000908120845181546001600160a01b0319166001600160a01b0391821617825594840151600190910180546001600160801b0319166001600160801b03909216919091179055338152600483528181209389168152929091529020848483818110610c3457610c346112d8565b835460018101855560009485526020948590209190940292909201359190920155507feec9ba5bfbc4283796482d3f7c7e891a5375d4e02efefac262ba00280fc2608d3386868685818110610c8b57610c8b6112d8565b9050602002013542604051610cc794939291906001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b60405180910390a160018054906000610cdf83611291565b91905055508080610cef90611291565b9150506109db565b610cff610e27565b6001600160a01b038116610d645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103dc565b610d6d81610fb3565b50565b6001600160a01b038083166000908152600460209081526040808320938516835292815290829020805483518184028101840190945280845260609392830182828015610ddc57602002820191906000526020600020905b815481526020019060010190808311610dc8575b5050505050905092915050565b60046020528260005260406000206020528160005260406000208181548110610e1157600080fd5b9060005260206000200160009250925050505481565b6000546001600160a01b031633146104285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103dc565b600080805b6001600160a01b03808616600090815260046020908152604080832093881683529290522054811015610f9d576001600160a01b0380861660009081526004602090815260408083209388168352929052908120805483908110610eec57610eec6112d8565b60009182526020808320909101546001600160a01b038816835260038252604080842082855290925290822060010154909250610f32906001600160801b031642611263565b6001600160a01b0387166000908152600660205260408120546002549293509091610f5d9190611244565b9050610f698183611244565b610f7b90670de0b6b3a7640000611244565b610f85908661120a565b94505050508080610f9590611291565b915050610e86565b50610fab6201518082611222565b949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008083601f84011261101557600080fd5b50813567ffffffffffffffff81111561102d57600080fd5b6020830191508360208260051b850101111561104857600080fd5b9250929050565b60006020828403121561106157600080fd5b813561106c816112ee565b9392505050565b60006020828403121561108557600080fd5b815161106c816112ee565b600080604083850312156110a357600080fd5b82356110ae816112ee565b915060208301356110be816112ee565b809150509250929050565b6000806000606084860312156110de57600080fd5b83356110e9816112ee565b925060208401356110f9816112ee565b929592945050506040919091013590565b60008060006040848603121561111f57600080fd5b833561112a816112ee565b9250602084013567ffffffffffffffff81111561114657600080fd5b61115286828701611003565b9497909650939450505050565b6000806040838503121561117257600080fd5b823561117d816112ee565b946020939093013593505050565b60006020828403121561119d57600080fd5b8135801515811461106c57600080fd5b6000602082840312156111bf57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156111fe578351835292840192918401916001016111e2565b50909695505050505050565b6000821982111561121d5761121d6112ac565b500190565b60008261123f57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561125e5761125e6112ac565b500290565b600082821015611275576112756112ac565b500390565b600081611289576112896112ac565b506000190190565b60006000198214156112a5576112a56112ac565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610d6d57600080fdfea26469706673582212203ccfe86f88e79e8cf6a31cbf11457c834c93e77df16d8a285a602feca882cd6164736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063817b1cd2116100a2578063e4aaccab11610071578063e4aaccab14610289578063f2fde38b1461029c578063f3d942ec146102af578063fd9d142a146102d2578063fe3d1354146102f257600080fd5b8063817b1cd21461023f5780638da5cb5b146102485780639df7d47514610263578063bce8567e1461027657600080fd5b80636372df6a116100e95780636372df6a146101e8578063715018a6146101fb5780637319d65c1461020357806373a08ad51461021657806376ad03bc1461023657600080fd5b80630373a23a1461011b5780631cfff51b146101305780633d8e846e146101595780633fa16d991461017a575b600080fd5b61012e6101293660046111ad565b610305565b005b60005461014490600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b61016c61016736600461110a565b610312565b604051908152602001610150565b6101c161018836600461115f565b6003602090815260009283526040808420909152908252902080546001909101546001600160a01b03909116906001600160801b031682565b604080516001600160a01b0390931683526001600160801b03909116602083015201610150565b61012e6101f636600461115f565b610376565b61012e610416565b61012e61021136600461115f565b61042a565b61016c61022436600461104f565b60066020526000908152604090205481565b61016c60025481565b61016c60015481565b6000546040516001600160a01b039091168152602001610150565b61012e61027136600461110a565b6104b0565b61012e61028436600461118b565b6108ef565b61012e61029736600461110a565b610915565b61012e6102aa36600461104f565b610cf7565b6101446102bd36600461104f565b60056020526000908152604090205460ff1681565b6102e56102e0366004611090565b610d70565b60405161015091906111c6565b61016c6103003660046110c9565b610de9565b61030d610e27565b600255565b600080805b8381101561036d5761034f86868684818110610335576103356112d8565b905060200201602081019061034a919061104f565b610e81565b610359908361120a565b91508061036581611291565b915050610317565b50949350505050565b61037e610e27565b6001600160a01b03821660009081526005602052604090205460ff16156103e55760405162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9858dd08185b1c9958591e48185919195960521b60448201526064015b60405180910390fd5b6001600160a01b039091166000908152600560209081526040808320805460ff191660011790556006909152902055565b61041e610e27565b6104286000610fb3565b565b610432610e27565b6001600160a01b03821660009081526005602052604090205460ff1615156001146104945760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081b9bdd08185919195960721b60448201526064016103dc565b6001600160a01b03909116600090815260066020526040902055565b600054600160a01b900460ff16151560011461050e5760405162461bcd60e51b815260206004820152601b60248201527f5374616b696e67206973206e6f7420656e61626c6564207965742e000000000060448201526064016103dc565b6001600160a01b03831660009081526005602052604090205460ff1615156001146105725760405162461bcd60e51b815260206004820152601460248201527310dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b60448201526064016103dc565b8260005b828110156108e85760008060005b3360009081526004602090815260408083206001600160a01b038c16845290915290205481101561062d578686858181106105c1576105c16112d8565b3360009081526004602090815260408083206001600160a01b038f1684528252909120805492909102939093013592915083908110610602576106026112d8565b9060005260206000200154141561061b57600192508091505b8061062581611291565b915050610584565b506001821515146106805760405162461bcd60e51b815260206004820152601960248201527f596f7520646f206e6f74206f776e207468697320546f6b656e0000000000000060448201526064016103dc565b836001600160a01b03166323b872dd30338989888181106106a3576106a36112d8565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b1580156106fa57600080fd5b505af115801561070e573d6000803e3d6000fd5b5050506001600160a01b0388166000908152600360205260408120915087878681811061073d5761073d6112d8565b60209081029290920135835250810191909152604001600090812080546001600160a01b0319168155600190810180546001600160801b03191690558054916107858361127a565b90915550503360009081526004602090815260408083206001600160a01b038b168452909152902080546107bb90600190611263565b815481106107cb576107cb6112d8565b60009182526020808320909101543383526004825260408084206001600160a01b038c1685529092529120805483908110610808576108086112d8565b60009182526020808320909101929092553381526004825260408082206001600160a01b038b16835290925220805480610844576108446112c2565b600190038181906000526020600020016000905590557f2cba55f1bc992f27ae3c165ae6392e6ccefcd891a59089721bf95afbb3976b72338888888781811061088f5761088f6112d8565b90506020020135426040516108cb94939291906001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b60405180910390a1505080806108e090611291565b915050610576565b5050505050565b6108f7610e27565b60008054911515600160a01b0260ff60a01b19909216919091179055565b600054600160a01b900460ff1615156001146109735760405162461bcd60e51b815260206004820152601b60248201527f5374616b696e67206973206e6f7420656e61626c6564207965742e000000000060448201526064016103dc565b6001600160a01b03831660009081526005602052604090205460ff1615156001146109d75760405162461bcd60e51b815260206004820152601460248201527310dbdb9d1c9858dd081b9bdd08185b1b1bddd95960621b60448201526064016103dc565b8260005b828110156108e857336001600160a01b038316636352211e868685818110610a0557610a056112d8565b905060200201356040518263ffffffff1660e01b8152600401610a2a91815260200190565b60206040518083038186803b158015610a4257600080fd5b505afa158015610a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7a9190611073565b6001600160a01b031614610ad05760405162461bcd60e51b815260206004820152601960248201527f596f7520646f206e6f74206f776e207468697320746f6b656e0000000000000060448201526064016103dc565b816001600160a01b03166323b872dd3330878786818110610af357610af36112d8565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b158015610b4a57600080fd5b505af1158015610b5e573d6000803e3d6000fd5b50506040805180820182523381526001600160801b0342166020808301919091526001600160a01b038a16600090815260039091529182209093509150868685818110610bad57610bad6112d8565b602090810292909201358352508181019290925260409081016000908120845181546001600160a01b0319166001600160a01b0391821617825594840151600190910180546001600160801b0319166001600160801b03909216919091179055338152600483528181209389168152929091529020848483818110610c3457610c346112d8565b835460018101855560009485526020948590209190940292909201359190920155507feec9ba5bfbc4283796482d3f7c7e891a5375d4e02efefac262ba00280fc2608d3386868685818110610c8b57610c8b6112d8565b9050602002013542604051610cc794939291906001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b60405180910390a160018054906000610cdf83611291565b91905055508080610cef90611291565b9150506109db565b610cff610e27565b6001600160a01b038116610d645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103dc565b610d6d81610fb3565b50565b6001600160a01b038083166000908152600460209081526040808320938516835292815290829020805483518184028101840190945280845260609392830182828015610ddc57602002820191906000526020600020905b815481526020019060010190808311610dc8575b5050505050905092915050565b60046020528260005260406000206020528160005260406000208181548110610e1157600080fd5b9060005260206000200160009250925050505481565b6000546001600160a01b031633146104285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103dc565b600080805b6001600160a01b03808616600090815260046020908152604080832093881683529290522054811015610f9d576001600160a01b0380861660009081526004602090815260408083209388168352929052908120805483908110610eec57610eec6112d8565b60009182526020808320909101546001600160a01b038816835260038252604080842082855290925290822060010154909250610f32906001600160801b031642611263565b6001600160a01b0387166000908152600660205260408120546002549293509091610f5d9190611244565b9050610f698183611244565b610f7b90670de0b6b3a7640000611244565b610f85908661120a565b94505050508080610f9590611291565b915050610e86565b50610fab6201518082611222565b949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008083601f84011261101557600080fd5b50813567ffffffffffffffff81111561102d57600080fd5b6020830191508360208260051b850101111561104857600080fd5b9250929050565b60006020828403121561106157600080fd5b813561106c816112ee565b9392505050565b60006020828403121561108557600080fd5b815161106c816112ee565b600080604083850312156110a357600080fd5b82356110ae816112ee565b915060208301356110be816112ee565b809150509250929050565b6000806000606084860312156110de57600080fd5b83356110e9816112ee565b925060208401356110f9816112ee565b929592945050506040919091013590565b60008060006040848603121561111f57600080fd5b833561112a816112ee565b9250602084013567ffffffffffffffff81111561114657600080fd5b61115286828701611003565b9497909650939450505050565b6000806040838503121561117257600080fd5b823561117d816112ee565b946020939093013593505050565b60006020828403121561119d57600080fd5b8135801515811461106c57600080fd5b6000602082840312156111bf57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156111fe578351835292840192918401916001016111e2565b50909695505050505050565b6000821982111561121d5761121d6112ac565b500190565b60008261123f57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561125e5761125e6112ac565b500290565b600082821015611275576112756112ac565b500390565b600081611289576112896112ac565b506000190190565b60006000198214156112a5576112a56112ac565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610d6d57600080fdfea26469706673582212203ccfe86f88e79e8cf6a31cbf11457c834c93e77df16d8a285a602feca882cd6164736f6c63430008070033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.