Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 54 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 21262514 | 376 days ago | IN | 0 ETH | 0.00037714 | ||||
| Set Withdraw Sha... | 21262509 | 376 days ago | IN | 0 ETH | 0.00020339 | ||||
| Set Withdraw Sha... | 21262500 | 376 days ago | IN | 0 ETH | 0.00021248 | ||||
| Public Mint | 21257210 | 376 days ago | IN | 0.005 ETH | 0.0006015 | ||||
| Public Mint | 21257152 | 376 days ago | IN | 0.01 ETH | 0.00042886 | ||||
| Public Mint | 21257129 | 376 days ago | IN | 0.015 ETH | 0.00061102 | ||||
| Public Mint | 21257050 | 376 days ago | IN | 0.02 ETH | 0.00039185 | ||||
| Public Mint | 21256717 | 376 days ago | IN | 0.005 ETH | 0.00059395 | ||||
| Public Mint | 21256593 | 376 days ago | IN | 0.005 ETH | 0.0006458 | ||||
| Public Mint | 21254795 | 377 days ago | IN | 0.01 ETH | 0.00068795 | ||||
| Public Mint | 21150623 | 391 days ago | IN | 0.005 ETH | 0.00104157 | ||||
| Public Mint | 21102852 | 398 days ago | IN | 0.01 ETH | 0.0002943 | ||||
| Public Mint | 21100484 | 398 days ago | IN | 0.005 ETH | 0.00044426 | ||||
| Public Mint | 21100083 | 398 days ago | IN | 0.005 ETH | 0.00031296 | ||||
| Public Mint | 21098453 | 398 days ago | IN | 0.005 ETH | 0.00021026 | ||||
| Public Mint | 21097443 | 399 days ago | IN | 0.005 ETH | 0.00022974 | ||||
| Public Mint | 21057320 | 404 days ago | IN | 0.01 ETH | 0.00056979 | ||||
| Public Mint | 21057135 | 404 days ago | IN | 0.005 ETH | 0.00045062 | ||||
| Public Mint | 21055544 | 404 days ago | IN | 0.005 ETH | 0.00028222 | ||||
| Public Mint | 21053591 | 405 days ago | IN | 0.005 ETH | 0.00021625 | ||||
| Public Mint | 21052956 | 405 days ago | IN | 0.005 ETH | 0.00030867 | ||||
| Public Mint | 21052828 | 405 days ago | IN | 0.005 ETH | 0.00032389 | ||||
| Public Mint | 21052666 | 405 days ago | IN | 0.005 ETH | 0.00042672 | ||||
| Public Mint | 21052460 | 405 days ago | IN | 0.005 ETH | 0.00032618 | ||||
| Public Mint | 21051370 | 405 days ago | IN | 0.005 ETH | 0.00033303 |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
NAGOMIMinterTwoYears
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";
interface iNAGOMIHappyBirthday {
function externalMint(address _to, uint256 _id, uint256 _amount) external;
function totalSupply(uint256 id) external view returns (uint256);
}
contract NAGOMIMinterTwoYears is Ownable {
iNAGOMIHappyBirthday public NAGOMIHappyBirthday;
bytes32 public freeMintMerkleRoot;
bytes32 public allowlistMintMerkleRoot;
uint256 public constant MAX_SUPPLY = 10000;
uint256 public constant MINT_COST = 0.005 ether;
uint256[2] public withdrawShare = [80, 20];
address[2] public withdrawAddress = [
0x445513cd8ECA1E98b0C70f1Cdc52C4d986dDC987,
0xe273eF71274926b7Dec32546Af84dB6e37eFADbF
];
/// @notice HalfYearの名残り
enum SalePhase {
Locked,
FreeMint,
AllowlistMint,
PublicMint
}
SalePhase public phase = SalePhase.Locked;
event Minted(address _to, uint256 _amount);
event PhaseChanged(SalePhase _phase);
constructor() {}
/**
* モディファイア
*/
modifier callerIsUser() {
require(tx.origin == msg.sender, "called by contract");
_;
}
modifier notZeroMint(uint256 _mintAmount) {
require(_mintAmount != 0, "mintAmount is zero");
_;
}
modifier enoughEth(uint256 _mintAmount) {
require(MINT_COST * _mintAmount <= msg.value, "not enough eth");
_;
}
modifier notOverMaxSupply(uint256 _mintAmount) {
require(
_mintAmount + sumOfTotalSupply() <= MAX_SUPPLY,
"exceeds max supply"
);
_;
}
/**
* withdraw関数
*/
/// @dev 引出し先アドレスのsetter関数
function setWithdrawAddress(
uint256 _index,
address _withdrawAddress
) external onlyOwner {
require(_withdrawAddress != address(0), "withdrawAddress can't be 0");
withdrawAddress[_index] = _withdrawAddress;
}
/// @dev 引出し割合のsetter関数
function setWithdrawShare(
uint256 _index,
uint256 _withdrawShare
) external onlyOwner {
withdrawShare[_index] = _withdrawShare;
}
/// @dev 引出し用関数
function withdraw() external payable onlyOwner {
uint256 initialBalance = address(this).balance;
for (uint256 index; index < withdrawAddress.length; index++) {
require(
withdrawAddress[index] != address(0),
"withdrawAddress can't be 0"
);
uint256 sharedAmount = (initialBalance * withdrawShare[index]) /
100;
(bool sent, ) = payable(withdrawAddress[index]).call{
value: sharedAmount
}("");
require(sent, "failed to withdraw");
}
}
/**
* ミント関数
*/
/// @dev パブリックミント用のMint関数
function publicMint(
address _account,
uint256 _mintAmount
)
external
payable
callerIsUser
notZeroMint(_mintAmount)
enoughEth(_mintAmount)
notOverMaxSupply(_mintAmount)
{
// セールフェイズチェック
require(phase == SalePhase.PublicMint, "PublicMint is disabled");
// 親コントラクトの関数を呼び出してミント
NAGOMIHappyBirthday.externalMint(_account, 3, _mintAmount);
// イベントをエミット
emit Minted(_account, _mintAmount);
}
/// @dev エアドロミント関数
function adminMint(
address[] calldata _airdropAddresses,
uint256[] calldata _userMintAmount
) external onlyOwner {
require(
_airdropAddresses.length == _userMintAmount.length,
"array length mismatch"
);
uint256 _totalMintAmmount;
for (uint256 i = 0; i < _userMintAmount.length; i++) {
require(_userMintAmount[i] > 0, "amount 0 address exists!");
// adminがボケた引数を入れないことが大前提
unchecked {
_totalMintAmmount += _userMintAmount[i];
}
require(
_totalMintAmmount + sumOfTotalSupply() <= MAX_SUPPLY,
"exceeds max supply"
);
NAGOMIHappyBirthday.externalMint(
_airdropAddresses[i],
3,
_userMintAmount[i]
);
// randomMint(_airdropAddresses[i], _userMintAmount[i]);
}
}
/**
* その他の関数
*/
/// @dev 親コントラクトのsetter
function setNAGOMIHappyBirthday(
address _contractAddress
) external onlyOwner {
NAGOMIHappyBirthday = iNAGOMIHappyBirthday(_contractAddress);
}
/// @dev セールフェーズのsetter
function setPhase(SalePhase _phase) external onlyOwner {
if (_phase != phase) {
phase = _phase;
emit PhaseChanged(_phase);
}
}
/// @dev 全tokenIdのtotalSupply和のgetter
/// @notice 関数名はHalfYearの名残り
function sumOfTotalSupply() public view returns (uint256) {
return NAGOMIHappyBirthday.totalSupply(3);
}
}// 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 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;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol)
pragma solidity ^0.8.0;
/**
* @dev These functions deal with verification of Merkle Tree proofs.
*
* The tree and the proofs can be generated using our
* https://github.com/OpenZeppelin/merkle-tree[JavaScript library].
* You will find a quickstart guide in the readme.
*
* WARNING: You should avoid using leaf values that are 64 bytes long prior to
* hashing, or use a hash function other than keccak256 for hashing leaves.
* This is because the concatenation of a sorted pair of internal nodes in
* the merkle tree could be reinterpreted as a leaf value.
* OpenZeppelin's JavaScript library generates merkle trees that are safe
* against this attack out of the box.
*/
library MerkleProof {
/**
* @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
* defined by `root`. For this, a `proof` must be provided, containing
* sibling hashes on the branch from the leaf to the root of the tree. Each
* pair of leaves and each pair of pre-images are assumed to be sorted.
*/
function verify(
bytes32[] memory proof,
bytes32 root,
bytes32 leaf
) internal pure returns (bool) {
return processProof(proof, leaf) == root;
}
/**
* @dev Calldata version of {verify}
*
* _Available since v4.7._
*/
function verifyCalldata(
bytes32[] calldata proof,
bytes32 root,
bytes32 leaf
) internal pure returns (bool) {
return processProofCalldata(proof, leaf) == root;
}
/**
* @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
* from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
* hash matches the root of the tree. When processing the proof, the pairs
* of leafs & pre-images are assumed to be sorted.
*
* _Available since v4.4._
*/
function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
bytes32 computedHash = leaf;
for (uint256 i = 0; i < proof.length; i++) {
computedHash = _hashPair(computedHash, proof[i]);
}
return computedHash;
}
/**
* @dev Calldata version of {processProof}
*
* _Available since v4.7._
*/
function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
bytes32 computedHash = leaf;
for (uint256 i = 0; i < proof.length; i++) {
computedHash = _hashPair(computedHash, proof[i]);
}
return computedHash;
}
/**
* @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by
* `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
*
* CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
*
* _Available since v4.7._
*/
function multiProofVerify(
bytes32[] memory proof,
bool[] memory proofFlags,
bytes32 root,
bytes32[] memory leaves
) internal pure returns (bool) {
return processMultiProof(proof, proofFlags, leaves) == root;
}
/**
* @dev Calldata version of {multiProofVerify}
*
* CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
*
* _Available since v4.7._
*/
function multiProofVerifyCalldata(
bytes32[] calldata proof,
bool[] calldata proofFlags,
bytes32 root,
bytes32[] memory leaves
) internal pure returns (bool) {
return processMultiProofCalldata(proof, proofFlags, leaves) == root;
}
/**
* @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
* proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
* leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
* respectively.
*
* CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
* is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
* tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
*
* _Available since v4.7._
*/
function processMultiProof(
bytes32[] memory proof,
bool[] memory proofFlags,
bytes32[] memory leaves
) internal pure returns (bytes32 merkleRoot) {
// This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
// consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
// `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
// the merkle tree.
uint256 leavesLen = leaves.length;
uint256 totalHashes = proofFlags.length;
// Check proof validity.
require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");
// The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
// `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
bytes32[] memory hashes = new bytes32[](totalHashes);
uint256 leafPos = 0;
uint256 hashPos = 0;
uint256 proofPos = 0;
// At each step, we compute the next hash using two values:
// - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
// get the next hash.
// - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
// `proof` array.
for (uint256 i = 0; i < totalHashes; i++) {
bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
hashes[i] = _hashPair(a, b);
}
if (totalHashes > 0) {
return hashes[totalHashes - 1];
} else if (leavesLen > 0) {
return leaves[0];
} else {
return proof[0];
}
}
/**
* @dev Calldata version of {processMultiProof}.
*
* CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
*
* _Available since v4.7._
*/
function processMultiProofCalldata(
bytes32[] calldata proof,
bool[] calldata proofFlags,
bytes32[] memory leaves
) internal pure returns (bytes32 merkleRoot) {
// This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by
// consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
// `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
// the merkle tree.
uint256 leavesLen = leaves.length;
uint256 totalHashes = proofFlags.length;
// Check proof validity.
require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");
// The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
// `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
bytes32[] memory hashes = new bytes32[](totalHashes);
uint256 leafPos = 0;
uint256 hashPos = 0;
uint256 proofPos = 0;
// At each step, we compute the next hash using two values:
// - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
// get the next hash.
// - depending on the flag, either another value for the "main queue" (merging branches) or an element from the
// `proof` array.
for (uint256 i = 0; i < totalHashes; i++) {
bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
hashes[i] = _hashPair(a, b);
}
if (totalHashes > 0) {
return hashes[totalHashes - 1];
} else if (leavesLen > 0) {
return leaves[0];
} else {
return proof[0];
}
}
function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
}
function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
/// @solidity memory-safe-assembly
assembly {
mstore(0x00, a)
mstore(0x20, b)
value := keccak256(0x00, 0x40)
}
}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"enum NAGOMIMinterTwoYears.SalePhase","name":"_phase","type":"uint8"}],"name":"PhaseChanged","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_COST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NAGOMIHappyBirthday","outputs":[{"internalType":"contract iNAGOMIHappyBirthday","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_airdropAddresses","type":"address[]"},{"internalType":"uint256[]","name":"_userMintAmount","type":"uint256[]"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allowlistMintMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMintMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phase","outputs":[{"internalType":"enum NAGOMIMinterTwoYears.SalePhase","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"setNAGOMIHappyBirthday","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum NAGOMIMinterTwoYears.SalePhase","name":"_phase","type":"uint8"}],"name":"setPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"address","name":"_withdrawAddress","type":"address"}],"name":"setWithdrawAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_withdrawShare","type":"uint256"}],"name":"setWithdrawShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sumOfTotalSupply","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":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60c060405260506080908152601460a05262000020906004906002620000e6565b506040805180820190915273445513cd8eca1e98b0c70f1cdc52c4d986ddc987815273e273ef71274926b7dec32546af84db6e37efadbf60208201526200006c9060069060026200012e565b506008805460ff191690553480156200008457600080fd5b50620000903362000096565b62000190565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b82600281019282156200011c579160200282015b828111156200011c578251829060ff16905591602001919060010190620000fa565b506200012a92915062000179565b5090565b82600281019282156200011c579160200282015b828111156200011c57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000142565b5b808211156200012a57600081556001016200017a565b610f4080620001a06000396000f3fe6080604052600436106101145760003560e01c8063a487e1a2116100a0578063c662e48111610064578063c662e481146102bf578063ce6df2b9146102da578063f2fde38b146102ed578063fdcb1c301461030d578063fed096f81461032d57600080fd5b8063a487e1a214610218578063a49340cc14610238578063a77715d214610258578063b1c9fe6e14610278578063c03afb591461029f57600080fd5b8063715018a6116100e7578063715018a61461017757806372f529c91461018c5780638da5cb5b146101c45780639c7fc154146101e2578063a0d3cd451461020257600080fd5b806332cb6b0c146101195780633ccfd60b146101425780634d3132f41461014c57806368963df014610161575b600080fd5b34801561012557600080fd5b5061012f61271081565b6040519081526020015b60405180910390f35b61014a61034d565b005b34801561015857600080fd5b5061012f6104c8565b34801561016d57600080fd5b5061012f60025481565b34801561018357600080fd5b5061014a61053b565b34801561019857600080fd5b506001546101ac906001600160a01b031681565b6040516001600160a01b039091168152602001610139565b3480156101d057600080fd5b506000546001600160a01b03166101ac565b3480156101ee57600080fd5b5061012f6101fd366004610c74565b61054f565b34801561020e57600080fd5b5061012f60035481565b34801561022457600080fd5b5061014a610233366004610c8d565b610566565b34801561024457600080fd5b5061014a610253366004610cfb565b610588565b34801561026457600080fd5b5061014a610273366004610d83565b610795565b34801561028457600080fd5b506008546102929060ff1681565b6040516101399190610dbb565b3480156102ab57600080fd5b5061014a6102ba366004610de3565b6107bf565b3480156102cb57600080fd5b5061012f6611c37937e0800081565b61014a6102e8366004610e04565b610854565b3480156102f957600080fd5b5061014a610308366004610d83565b610a9f565b34801561031957600080fd5b5061014a610328366004610e2e565b610b15565b34801561033957600080fd5b506101ac610348366004610c74565b610baa565b610355610bca565b4760005b60028110156104c45760006006826002811061037757610377610e5a565b01546001600160a01b0316036103d45760405162461bcd60e51b815260206004820152601a60248201527f7769746864726177416464726573732063616e2774206265203000000000000060448201526064015b60405180910390fd5b60006064600483600281106103eb576103eb610e5a565b01546103f79085610e86565b6104019190610ea3565b905060006006836002811061041857610418610e5a565b01546040516001600160a01b03909116908390600081818185875af1925050503d8060008114610464576040519150601f19603f3d011682016040523d82523d6000602084013e610469565b606091505b50509050806104af5760405162461bcd60e51b81526020600482015260126024820152716661696c656420746f20776974686472617760701b60448201526064016103cb565b505080806104bc90610ec5565b915050610359565b5050565b60015460405163bd85b03960e01b8152600360048201526000916001600160a01b03169063bd85b03990602401602060405180830381865afa158015610512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105369190610ede565b905090565b610543610bca565b61054d6000610c24565b565b6004816002811061055f57600080fd5b0154905081565b61056e610bca565b806004836002811061058257610582610e5a565b01555050565b610590610bca565b8281146105d75760405162461bcd60e51b81526020600482015260156024820152740c2e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b60448201526064016103cb565b6000805b8281101561078d5760008484838181106105f7576105f7610e5a565b905060200201351161064b5760405162461bcd60e51b815260206004820152601860248201527f616d6f756e74203020616464726573732065786973747321000000000000000060448201526064016103cb565b83838281811061065d5761065d610e5a565b90506020020135820191506127106106736104c8565b61067d9084610ef7565b11156106c05760405162461bcd60e51b815260206004820152601260248201527165786365656473206d617820737570706c7960701b60448201526064016103cb565b6001546001600160a01b031663a4cb51c78787848181106106e3576106e3610e5a565b90506020020160208101906106f89190610d83565b600387878681811061070c5761070c610e5a565b6040516001600160e01b031960e088901b1681526001600160a01b039095166004860152602485019390935250602090910201356044820152606401600060405180830381600087803b15801561076257600080fd5b505af1158015610776573d6000803e3d6000fd5b50505050808061078590610ec5565b9150506105db565b505050505050565b61079d610bca565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6107c7610bca565b60085460ff1660038111156107de576107de610da5565b8160038111156107f0576107f0610da5565b14610851576008805482919060ff1916600183600381111561081457610814610da5565b02179055507fa6dcc92f45df25789d5639b7a0c97ba1edf3bb1c0b5dd3376fd96a0db87c4642816040516108489190610dbb565b60405180910390a15b50565b3233146108985760405162461bcd60e51b815260206004820152601260248201527118d85b1b195908189e4818dbdb9d1c9858dd60721b60448201526064016103cb565b80806000036108de5760405162461bcd60e51b81526020600482015260126024820152716d696e74416d6f756e74206973207a65726f60701b60448201526064016103cb565b81346108f1826611c37937e08000610e86565b11156109305760405162461bcd60e51b815260206004820152600e60248201526d0dcdee840cadcdeeaced040cae8d60931b60448201526064016103cb565b8261271061093c6104c8565b6109469083610ef7565b11156109895760405162461bcd60e51b815260206004820152601260248201527165786365656473206d617820737570706c7960701b60448201526064016103cb565b600360085460ff1660038111156109a2576109a2610da5565b146109e85760405162461bcd60e51b8152602060048201526016602482015275141d589b1a58d35a5b9d081a5cc8191a5cd8589b195960521b60448201526064016103cb565b60015460405163a4cb51c760e01b81526001600160a01b03878116600483015260036024830152604482018790529091169063a4cb51c790606401600060405180830381600087803b158015610a3d57600080fd5b505af1158015610a51573d6000803e3d6000fd5b5050604080516001600160a01b0389168152602081018890527f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe935001905060405180910390a15050505050565b610aa7610bca565b6001600160a01b038116610b0c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103cb565b61085181610c24565b610b1d610bca565b6001600160a01b038116610b735760405162461bcd60e51b815260206004820152601a60248201527f7769746864726177416464726573732063616e2774206265203000000000000060448201526064016103cb565b8060068360028110610b8757610b87610e5a565b0180546001600160a01b0319166001600160a01b03929092169190911790555050565b60068160028110610bba57600080fd5b01546001600160a01b0316905081565b6000546001600160a01b0316331461054d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103cb565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610c8657600080fd5b5035919050565b60008060408385031215610ca057600080fd5b50508035926020909101359150565b60008083601f840112610cc157600080fd5b50813567ffffffffffffffff811115610cd957600080fd5b6020830191508360208260051b8501011115610cf457600080fd5b9250929050565b60008060008060408587031215610d1157600080fd5b843567ffffffffffffffff80821115610d2957600080fd5b610d3588838901610caf565b90965094506020870135915080821115610d4e57600080fd5b50610d5b87828801610caf565b95989497509550505050565b80356001600160a01b0381168114610d7e57600080fd5b919050565b600060208284031215610d9557600080fd5b610d9e82610d67565b9392505050565b634e487b7160e01b600052602160045260246000fd5b6020810160048310610ddd57634e487b7160e01b600052602160045260246000fd5b91905290565b600060208284031215610df557600080fd5b813560048110610d9e57600080fd5b60008060408385031215610e1757600080fd5b610e2083610d67565b946020939093013593505050565b60008060408385031215610e4157600080fd5b82359150610e5160208401610d67565b90509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610e9d57610e9d610e70565b92915050565b600082610ec057634e487b7160e01b600052601260045260246000fd5b500490565b600060018201610ed757610ed7610e70565b5060010190565b600060208284031215610ef057600080fd5b5051919050565b80820180821115610e9d57610e9d610e7056fea26469706673582212207b4e5c4d71b4fc9943ead1fd0e4d3d9efc252f853b2cd656ef34e192c02bae6c64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106101145760003560e01c8063a487e1a2116100a0578063c662e48111610064578063c662e481146102bf578063ce6df2b9146102da578063f2fde38b146102ed578063fdcb1c301461030d578063fed096f81461032d57600080fd5b8063a487e1a214610218578063a49340cc14610238578063a77715d214610258578063b1c9fe6e14610278578063c03afb591461029f57600080fd5b8063715018a6116100e7578063715018a61461017757806372f529c91461018c5780638da5cb5b146101c45780639c7fc154146101e2578063a0d3cd451461020257600080fd5b806332cb6b0c146101195780633ccfd60b146101425780634d3132f41461014c57806368963df014610161575b600080fd5b34801561012557600080fd5b5061012f61271081565b6040519081526020015b60405180910390f35b61014a61034d565b005b34801561015857600080fd5b5061012f6104c8565b34801561016d57600080fd5b5061012f60025481565b34801561018357600080fd5b5061014a61053b565b34801561019857600080fd5b506001546101ac906001600160a01b031681565b6040516001600160a01b039091168152602001610139565b3480156101d057600080fd5b506000546001600160a01b03166101ac565b3480156101ee57600080fd5b5061012f6101fd366004610c74565b61054f565b34801561020e57600080fd5b5061012f60035481565b34801561022457600080fd5b5061014a610233366004610c8d565b610566565b34801561024457600080fd5b5061014a610253366004610cfb565b610588565b34801561026457600080fd5b5061014a610273366004610d83565b610795565b34801561028457600080fd5b506008546102929060ff1681565b6040516101399190610dbb565b3480156102ab57600080fd5b5061014a6102ba366004610de3565b6107bf565b3480156102cb57600080fd5b5061012f6611c37937e0800081565b61014a6102e8366004610e04565b610854565b3480156102f957600080fd5b5061014a610308366004610d83565b610a9f565b34801561031957600080fd5b5061014a610328366004610e2e565b610b15565b34801561033957600080fd5b506101ac610348366004610c74565b610baa565b610355610bca565b4760005b60028110156104c45760006006826002811061037757610377610e5a565b01546001600160a01b0316036103d45760405162461bcd60e51b815260206004820152601a60248201527f7769746864726177416464726573732063616e2774206265203000000000000060448201526064015b60405180910390fd5b60006064600483600281106103eb576103eb610e5a565b01546103f79085610e86565b6104019190610ea3565b905060006006836002811061041857610418610e5a565b01546040516001600160a01b03909116908390600081818185875af1925050503d8060008114610464576040519150601f19603f3d011682016040523d82523d6000602084013e610469565b606091505b50509050806104af5760405162461bcd60e51b81526020600482015260126024820152716661696c656420746f20776974686472617760701b60448201526064016103cb565b505080806104bc90610ec5565b915050610359565b5050565b60015460405163bd85b03960e01b8152600360048201526000916001600160a01b03169063bd85b03990602401602060405180830381865afa158015610512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105369190610ede565b905090565b610543610bca565b61054d6000610c24565b565b6004816002811061055f57600080fd5b0154905081565b61056e610bca565b806004836002811061058257610582610e5a565b01555050565b610590610bca565b8281146105d75760405162461bcd60e51b81526020600482015260156024820152740c2e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b60448201526064016103cb565b6000805b8281101561078d5760008484838181106105f7576105f7610e5a565b905060200201351161064b5760405162461bcd60e51b815260206004820152601860248201527f616d6f756e74203020616464726573732065786973747321000000000000000060448201526064016103cb565b83838281811061065d5761065d610e5a565b90506020020135820191506127106106736104c8565b61067d9084610ef7565b11156106c05760405162461bcd60e51b815260206004820152601260248201527165786365656473206d617820737570706c7960701b60448201526064016103cb565b6001546001600160a01b031663a4cb51c78787848181106106e3576106e3610e5a565b90506020020160208101906106f89190610d83565b600387878681811061070c5761070c610e5a565b6040516001600160e01b031960e088901b1681526001600160a01b039095166004860152602485019390935250602090910201356044820152606401600060405180830381600087803b15801561076257600080fd5b505af1158015610776573d6000803e3d6000fd5b50505050808061078590610ec5565b9150506105db565b505050505050565b61079d610bca565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6107c7610bca565b60085460ff1660038111156107de576107de610da5565b8160038111156107f0576107f0610da5565b14610851576008805482919060ff1916600183600381111561081457610814610da5565b02179055507fa6dcc92f45df25789d5639b7a0c97ba1edf3bb1c0b5dd3376fd96a0db87c4642816040516108489190610dbb565b60405180910390a15b50565b3233146108985760405162461bcd60e51b815260206004820152601260248201527118d85b1b195908189e4818dbdb9d1c9858dd60721b60448201526064016103cb565b80806000036108de5760405162461bcd60e51b81526020600482015260126024820152716d696e74416d6f756e74206973207a65726f60701b60448201526064016103cb565b81346108f1826611c37937e08000610e86565b11156109305760405162461bcd60e51b815260206004820152600e60248201526d0dcdee840cadcdeeaced040cae8d60931b60448201526064016103cb565b8261271061093c6104c8565b6109469083610ef7565b11156109895760405162461bcd60e51b815260206004820152601260248201527165786365656473206d617820737570706c7960701b60448201526064016103cb565b600360085460ff1660038111156109a2576109a2610da5565b146109e85760405162461bcd60e51b8152602060048201526016602482015275141d589b1a58d35a5b9d081a5cc8191a5cd8589b195960521b60448201526064016103cb565b60015460405163a4cb51c760e01b81526001600160a01b03878116600483015260036024830152604482018790529091169063a4cb51c790606401600060405180830381600087803b158015610a3d57600080fd5b505af1158015610a51573d6000803e3d6000fd5b5050604080516001600160a01b0389168152602081018890527f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe935001905060405180910390a15050505050565b610aa7610bca565b6001600160a01b038116610b0c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103cb565b61085181610c24565b610b1d610bca565b6001600160a01b038116610b735760405162461bcd60e51b815260206004820152601a60248201527f7769746864726177416464726573732063616e2774206265203000000000000060448201526064016103cb565b8060068360028110610b8757610b87610e5a565b0180546001600160a01b0319166001600160a01b03929092169190911790555050565b60068160028110610bba57600080fd5b01546001600160a01b0316905081565b6000546001600160a01b0316331461054d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103cb565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208284031215610c8657600080fd5b5035919050565b60008060408385031215610ca057600080fd5b50508035926020909101359150565b60008083601f840112610cc157600080fd5b50813567ffffffffffffffff811115610cd957600080fd5b6020830191508360208260051b8501011115610cf457600080fd5b9250929050565b60008060008060408587031215610d1157600080fd5b843567ffffffffffffffff80821115610d2957600080fd5b610d3588838901610caf565b90965094506020870135915080821115610d4e57600080fd5b50610d5b87828801610caf565b95989497509550505050565b80356001600160a01b0381168114610d7e57600080fd5b919050565b600060208284031215610d9557600080fd5b610d9e82610d67565b9392505050565b634e487b7160e01b600052602160045260246000fd5b6020810160048310610ddd57634e487b7160e01b600052602160045260246000fd5b91905290565b600060208284031215610df557600080fd5b813560048110610d9e57600080fd5b60008060408385031215610e1757600080fd5b610e2083610d67565b946020939093013593505050565b60008060408385031215610e4157600080fd5b82359150610e5160208401610d67565b90509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610e9d57610e9d610e70565b92915050565b600082610ec057634e487b7160e01b600052601260045260246000fd5b500490565b600060018201610ed757610ed7610e70565b5060010190565b600060208284031215610ef057600080fd5b5051919050565b80820180821115610e9d57610e9d610e7056fea26469706673582212207b4e5c4d71b4fc9943ead1fd0e4d3d9efc252f853b2cd656ef34e192c02bae6c64736f6c63430008110033
Loading...
Loading
Loading...
Loading
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.