Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MerkleDistributor
Compiler Version
v0.6.11+commit.5ef660b1
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-05-06
*/
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.6.0 <0.8.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);
}
// File: @openzeppelin/contracts/cryptography/MerkleProof.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev These functions deal with verification of Merkle trees (hash trees),
*/
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) {
bytes32 computedHash = leaf;
for (uint256 i = 0; i < proof.length; i++) {
bytes32 proofElement = proof[i];
if (computedHash <= proofElement) {
// Hash(current computed hash + current element of the proof)
computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
} else {
// Hash(current element of the proof + current computed hash)
computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
}
}
// Check if the computed hash (root) is equal to the provided root
return computedHash == root;
}
}
// File: contracts/UpgradeableOwnable.sol
pragma solidity >=0.6.0 <0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
contract UpgradeableOwnable {
bytes32 private constant _OWNER_SLOT = 0xa7b53796fd2d99cb1f5ae019b54f9e024446c3d12b483f733ccc62ed04eb126a;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor () internal {
assert(_OWNER_SLOT == bytes32(uint256(keccak256("eip1967.proxy.owner")) - 1));
_setOwner(msg.sender);
emit OwnershipTransferred(address(0), msg.sender);
}
function _setOwner(address newOwner) private {
bytes32 slot = _OWNER_SLOT;
// solium-disable-next-line security/no-inline-assembly
assembly {
sstore(slot, newOwner)
}
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address o) {
bytes32 slot = _OWNER_SLOT;
// solium-disable-next-line security/no-inline-assembly
assembly {
o := sload(slot)
}
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == msg.sender, "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 {
emit OwnershipTransferred(owner(), address(0));
_setOwner(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");
emit OwnershipTransferred(owner(), newOwner);
_setOwner(newOwner);
}
}
// File: contracts/interfaces/IMerkleDistributor.sol
pragma solidity >=0.5.0;
// Allows anyone to claim a token if they exist in a merkle root.
interface IMerkleDistributor {
// Returns the address of the token distributed by this contract.
function token() external view returns (address);
// Returns the merkle root of the merkle tree containing account balances available to claim.
function merkleRoot() external view returns (bytes32);
// Returns true if the index has been marked claimed.
function isClaimed(uint256 index) external view returns (bool);
// Claim the given amount of the token to the given address. Reverts if the inputs are invalid.
function claim(uint256 index, address account, uint256 amount, bytes32[] calldata merkleProof) external;
// This event is triggered whenever a call to #claim succeeds.
event Claimed(uint256 index, address account, uint256 amount);
}
// File: contracts/MerkleDistributor.sol
pragma solidity =0.6.11;
contract MerkleDistributor is IMerkleDistributor, UpgradeableOwnable {
address public override token;
bytes32 public override merkleRoot;
// This is a packed array of booleans.
mapping(uint256 => uint256) private claimedBitMap;
// solium-disable-next-line
constructor() public {
}
function initialize(address token_, bytes32 merkleRoot_) external onlyOwner {
token = token_;
merkleRoot = merkleRoot_;
}
function isClaimed(uint256 index) public view override returns (bool) {
uint256 claimedWordIndex = index / 256;
uint256 claimedBitIndex = index % 256;
uint256 claimedWord = claimedBitMap[claimedWordIndex];
uint256 mask = (1 << claimedBitIndex);
return claimedWord & mask == mask;
}
function _setClaimed(uint256 index) private {
uint256 claimedWordIndex = index / 256;
uint256 claimedBitIndex = index % 256;
claimedBitMap[claimedWordIndex] = claimedBitMap[claimedWordIndex] | (1 << claimedBitIndex);
}
function claim(uint256 index, address account, uint256 amount, bytes32[] calldata merkleProof) external override {
require(!isClaimed(index), 'MerkleDistributor: Drop already claimed.');
// Verify the merkle proof.
bytes32 node = keccak256(abi.encodePacked(index, account, amount));
require(MerkleProof.verify(merkleProof, merkleRoot, node), 'MerkleDistributor: Invalid proof.');
// Mark it claimed and send the token.
_setClaimed(index);
require(IERC20(token).transfer(account, amount), 'MerkleDistributor: Transfer failed.');
emit Claimed(index, account, amount);
}
}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":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","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":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"},{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"isClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"o","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50604080517f656970313936372e70726f78792e6f776e6572000000000000000000000000008152905190819003601301902060008051602061091e8339815191526000199091011461005f57fe5b610071336001600160e01b036100a316565b60405133906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36100b5565b60008051602061091e83398151915255565b61085a806100c46000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80639e34070f1161005b5780639e34070f14610161578063be13f47c14610192578063f2fde38b146101be578063fc0c546a146101e457610088565b80632e7ba6ef1461008d5780632eb4a7ab1461011b578063715018a6146101355780638da5cb5b1461013d575b600080fd5b610119600480360360808110156100a357600080fd5b8135916001600160a01b0360208201351691604082013591908101906080810160608201356401000000008111156100da57600080fd5b8201836020820111156100ec57600080fd5b8035906020019184602083028401116401000000008311171561010e57600080fd5b5090925090506101ec565b005b610123610409565b60408051918252519081900360200190f35b61011961040f565b6101456104be565b604080516001600160a01b039092168252519081900360200190f35b61017e6004803603602081101561017757600080fd5b50356104e3565b604080519115158252519081900360200190f35b610119600480360360408110156101a857600080fd5b506001600160a01b038135169060200135610509565b610119600480360360208110156101d457600080fd5b50356001600160a01b0316610593565b61014561068f565b6101f5856104e3565b156102315760405162461bcd60e51b81526004018080602001828103825260288152602001806107b96028913960400191505060405180910390fd5b6040805160208082018890526bffffffffffffffffffffffff19606088901b16828401526054808301879052835180840390910181526074830180855281519183019190912060949286028085018401909552858252936102b59391928792879283929091019084908082843760009201919091525050600154915084905061069e565b6102f05760405162461bcd60e51b81526004018080602001828103825260218152602001806107e16021913960400191505060405180910390fd5b6102f986610747565b600080546040805163a9059cbb60e01b81526001600160a01b038981166004830152602482018990529151919092169263a9059cbb92604480820193602093909283900390910190829087803b15801561035257600080fd5b505af1158015610366573d6000803e3d6000fd5b505050506040513d602081101561037c57600080fd5b50516103b95760405162461bcd60e51b81526004018080602001828103825260238152602001806108026023913960400191505060405180910390fd5b604080518781526001600160a01b038716602082015280820186905290517f4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed0269181900360600190a1505050505050565b60015481565b336104186104be565b6001600160a01b031614610473576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600061047d6104be565b6001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36104bc600061076e565b565b7fa7b53796fd2d99cb1f5ae019b54f9e024446c3d12b483f733ccc62ed04eb126a5490565b6101008104600090815260026020526040902054600160ff9092169190911b9081161490565b336105126104be565b6001600160a01b03161461056d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b039390931692909217909155600155565b3361059c6104be565b6001600160a01b0316146105f7576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811661063c5760405162461bcd60e51b81526004018080602001828103825260268152602001806107936026913960400191505060405180910390fd5b806001600160a01b031661064e6104be565b6001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361068c8161076e565b50565b6000546001600160a01b031681565b600081815b855181101561073c5760008682815181106106ba57fe5b602002602001015190508083116107015782816040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250610733565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b506001016106a3565b509092149392505050565b610100810460009081526002602052604090208054600160ff9093169290921b9091179055565b7fa7b53796fd2d99cb1f5ae019b54f9e024446c3d12b483f733ccc62ed04eb126a5556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d65726b6c654469737472696275746f723a2044726f7020616c726561647920636c61696d65642e4d65726b6c654469737472696275746f723a20496e76616c69642070726f6f662e4d65726b6c654469737472696275746f723a205472616e73666572206661696c65642ea2646970667358221220da972e043872814e20d258c2900af45d8678940a0d1df2055967f3e230c1b72764736f6c634300060b0033a7b53796fd2d99cb1f5ae019b54f9e024446c3d12b483f733ccc62ed04eb126a
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100885760003560e01c80639e34070f1161005b5780639e34070f14610161578063be13f47c14610192578063f2fde38b146101be578063fc0c546a146101e457610088565b80632e7ba6ef1461008d5780632eb4a7ab1461011b578063715018a6146101355780638da5cb5b1461013d575b600080fd5b610119600480360360808110156100a357600080fd5b8135916001600160a01b0360208201351691604082013591908101906080810160608201356401000000008111156100da57600080fd5b8201836020820111156100ec57600080fd5b8035906020019184602083028401116401000000008311171561010e57600080fd5b5090925090506101ec565b005b610123610409565b60408051918252519081900360200190f35b61011961040f565b6101456104be565b604080516001600160a01b039092168252519081900360200190f35b61017e6004803603602081101561017757600080fd5b50356104e3565b604080519115158252519081900360200190f35b610119600480360360408110156101a857600080fd5b506001600160a01b038135169060200135610509565b610119600480360360208110156101d457600080fd5b50356001600160a01b0316610593565b61014561068f565b6101f5856104e3565b156102315760405162461bcd60e51b81526004018080602001828103825260288152602001806107b96028913960400191505060405180910390fd5b6040805160208082018890526bffffffffffffffffffffffff19606088901b16828401526054808301879052835180840390910181526074830180855281519183019190912060949286028085018401909552858252936102b59391928792879283929091019084908082843760009201919091525050600154915084905061069e565b6102f05760405162461bcd60e51b81526004018080602001828103825260218152602001806107e16021913960400191505060405180910390fd5b6102f986610747565b600080546040805163a9059cbb60e01b81526001600160a01b038981166004830152602482018990529151919092169263a9059cbb92604480820193602093909283900390910190829087803b15801561035257600080fd5b505af1158015610366573d6000803e3d6000fd5b505050506040513d602081101561037c57600080fd5b50516103b95760405162461bcd60e51b81526004018080602001828103825260238152602001806108026023913960400191505060405180910390fd5b604080518781526001600160a01b038716602082015280820186905290517f4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed0269181900360600190a1505050505050565b60015481565b336104186104be565b6001600160a01b031614610473576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600061047d6104be565b6001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36104bc600061076e565b565b7fa7b53796fd2d99cb1f5ae019b54f9e024446c3d12b483f733ccc62ed04eb126a5490565b6101008104600090815260026020526040902054600160ff9092169190911b9081161490565b336105126104be565b6001600160a01b03161461056d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b039390931692909217909155600155565b3361059c6104be565b6001600160a01b0316146105f7576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811661063c5760405162461bcd60e51b81526004018080602001828103825260268152602001806107936026913960400191505060405180910390fd5b806001600160a01b031661064e6104be565b6001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361068c8161076e565b50565b6000546001600160a01b031681565b600081815b855181101561073c5760008682815181106106ba57fe5b602002602001015190508083116107015782816040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209250610733565b808360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092505b506001016106a3565b509092149392505050565b610100810460009081526002602052604090208054600160ff9093169290921b9091179055565b7fa7b53796fd2d99cb1f5ae019b54f9e024446c3d12b483f733ccc62ed04eb126a5556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734d65726b6c654469737472696275746f723a2044726f7020616c726561647920636c61696d65642e4d65726b6c654469737472696275746f723a20496e76616c69642070726f6f662e4d65726b6c654469737472696275746f723a205472616e73666572206661696c65642ea2646970667358221220da972e043872814e20d258c2900af45d8678940a0d1df2055967f3e230c1b72764736f6c634300060b0033
Deployed Bytecode Sourcemap
8045:1729:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9121:650;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9121:650:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9121:650:0;;-1:-1:-1;9121:650:0;-1:-1:-1;9121:650:0;:::i;:::-;;8157:34;;;:::i;:::-;;;;;;;;;;;;;;;;6451:151;;;:::i;5661:228::-;;;:::i;:::-;;;;-1:-1:-1;;;;;5661:228:0;;;;;;;;;;;;;;8524:331;;;;;;;;;;;;;;;;-1:-1:-1;8524:331:0;;:::i;:::-;;;;;;;;;;;;;;;;;;8372:144;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8372:144:0;;;;;;;;:::i;6757:247::-;;;;;;;;;;;;;;;;-1:-1:-1;6757:247:0;-1:-1:-1;;;;;6757:247:0;;:::i;8121:29::-;;;:::i;9121:650::-;9254:16;9264:5;9254:9;:16::i;:::-;9253:17;9245:70;;;;-1:-1:-1;;;9245:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9390:40;;;;;;;;;;-1:-1:-1;;9390:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9380:51;;;;;;;;;9450:49;;;;;;;;;;;;;;;9380:51;9450:49;;9390:40;;9469:11;;;;;;9450:49;;;;9469:11;;9450:49;9469:11;9450:49;;;;;;;;;-1:-1:-1;;9482:10:0;;;-1:-1:-1;9494:4:0;;-1:-1:-1;9450:18:0;:49::i;:::-;9442:95;;;;-1:-1:-1;;;9442:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9598:18;9610:5;9598:11;:18::i;:::-;9642:5;;;9635:39;;;-1:-1:-1;;;9635:39:0;;-1:-1:-1;;;;;9635:39:0;;;;;;;;;;;;;;;9642:5;;;;;9635:22;;:39;;;;;;;;;;;;;;;;;;9642:5;9635:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9635:39:0;9627:87;;;;-1:-1:-1;;;9627:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9732:31;;;;;;-1:-1:-1;;;;;9732:31:0;;;;;;;;;;;;;;;;;;;;;;;9121:650;;;;;;:::o;8157:34::-;;;;:::o;6451:151::-;6033:10;6022:7;:5;:7::i;:::-;-1:-1:-1;;;;;6022:21:0;;6014:66;;;;;-1:-1:-1;;;6014:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6559:1:::1;6542:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;6521:41:0::1;;;;;;;;;;;6573:21;6591:1;6573:9;:21::i;:::-;6451:151::o:0;5661:228::-;4872:66;5860:11;;5840:42::o;8524:331::-;8640:3;8632:11;;8588:4;8724:31;;;:13;:31;;;;;;8782:1;8680:11;;;;8782:20;;;;8821:18;;;:26;;8524:331::o;8372:144::-;6033:10;6022:7;:5;:7::i;:::-;-1:-1:-1;;;;;6022:21:0;;6014:66;;;;;-1:-1:-1;;;6014:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8459:5:::1;:14:::0;;-1:-1:-1;;;;;;8459:14:0::1;-1:-1:-1::0;;;;;8459:14:0;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;8484:24:0;8372:144::o;6757:247::-;6033:10;6022:7;:5;:7::i;:::-;-1:-1:-1;;;;;6022:21:0;;6014:66;;;;;-1:-1:-1;;;6014:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6846:22:0;::::1;6838:73;;;;-1:-1:-1::0;;;6838:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6957:8;-1:-1:-1::0;;;;;6927:39:0::1;6948:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;6927:39:0::1;;;;;;;;;;;6977:19;6987:8;6977:9;:19::i;:::-;6757:247:::0;:::o;8121:29::-;;;-1:-1:-1;;;;;8121:29:0;;:::o;3402:796::-;3493:4;3533;3493;3550:525;3574:5;:12;3570:1;:16;3550:525;;;3608:20;3631:5;3637:1;3631:8;;;;;;;;;;;;;;3608:31;;3676:12;3660;:28;3656:408;;3830:12;3844;3813:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3803:55;;;;;;3788:70;;3656:408;;;4020:12;4034;4003:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3993:55;;;;;;3978:70;;3656:408;-1:-1:-1;3588:3:0;;3550:525;;;-1:-1:-1;4170:20:0;;;;3402:796;-1:-1:-1;;;3402:796:0:o;8863:250::-;8953:3;8945:11;;8918:24;9049:31;;;:13;:31;;;;;;;9084:1;8993:11;;;;9084:20;;;;9049:56;;;9015:90;;8863:250::o;5358:222::-;4872:66;5540:22;5525:48::o
Swarm Source
ipfs://da972e043872814e20d258c2900af45d8678940a0d1df2055967f3e230c1b727
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
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.