More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
BearLabsProxyMint
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.8.9; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; import "@openzeppelin/contracts/utils/Counters.sol"; import "@openzeppelin/contracts/utils/Context.sol"; interface Bearlab { function proxyMint(address _address, uint256 _tokenId) external; } contract BearLabsProxyMint is Context, Ownable { using SafeMath for uint256; using Counters for Counters.Counter; Counters.Counter private m_TokenIdCounter; event MintByStaked( address indexed receiver, uint256 indexed numberOfTokens, bytes signature ); event MintByWallet( address indexed receiver, uint256 indexed numberOfTokens ); address private m_MSK = 0x72D7b17bF63322A943d4A2873310a83DcdBc3c8D; address private m_BearLab = 0xfC6DfeA7E513Dd4cB554032418B3b9f01cD24274; bool private m_IsMintable = false; // false uint256 private m_MaxMintPerAddress = 4; uint256 private m_MintPrice = 100000 ether; // 100K MSK uint256 private m_MintSupply = 101; uint256 private m_BaseCounter = 3333; address private m_Verify1 = 0x27798F382f4eE811B12f79e5E3035fb5134b3Dbf; address private m_Verify2 = 0x7f5467Fd11F4C7C7F143b03883Cda5432545dC13; uint256 private m_SignatureLifeTime = 1 minutes * 5; mapping(address => uint256) private m_MintCountList; constructor() {} function _mintDrop(address _address) private { m_TokenIdCounter.increment(); uint256 tokenId = m_BaseCounter.add(m_TokenIdCounter.current()); require(tokenId <= m_BaseCounter.add(m_MintSupply)); Bearlab(m_BearLab).proxyMint(_address, tokenId); m_MintCountList[_address] = m_MintCountList[_address].add(1); } function _safeMintMultiple(address _address, uint256 _numberOfTokens) private { while (_numberOfTokens > 0) { _mintDrop(_address); _numberOfTokens = _numberOfTokens.sub(1); } } function mintByWallet(uint256 _numberOfTokens) public { require(m_IsMintable, "must be active"); require(_numberOfTokens > 0); uint256 afterMintBalace = m_MintCountList[_msgSender()].add( _numberOfTokens ); require( afterMintBalace <= m_MaxMintPerAddress, "Over Max Mint per Address" ); IERC20 msk = IERC20(m_MSK); uint256 requireAmount = m_MintPrice.mul(_numberOfTokens); require( msk.balanceOf(_msgSender()) >= requireAmount, "Msk balance is not enough" ); msk.transferFrom(_msgSender(), address(this), requireAmount); _safeMintMultiple(_msgSender(), _numberOfTokens); emit MintByWallet(_msgSender(), _numberOfTokens); } function mintByStaked( uint256 _numberOfTokens, uint256 _time, bytes memory signature1, bytes memory signature2 ) external { require(m_IsMintable, "must be active"); require(_numberOfTokens > 0); uint256 afterMintBalace = m_MintCountList[_msgSender()].add( _numberOfTokens ); require( afterMintBalace <= m_MaxMintPerAddress, "Over Max Mint per Address" ); bytes32 messageHash = getMessageHash( _msgSender(), _numberOfTokens, _time, m_MintCountList[_msgSender()] ); bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash); require( recoverSigner(ethSignedMessageHash, signature1) == m_Verify1, "Different signer1" ); require( recoverSigner(ethSignedMessageHash, signature2) == m_Verify2, "Different signer2" ); require(block.timestamp - _time < m_SignatureLifeTime); _safeMintMultiple(_msgSender(), _numberOfTokens); emit MintByStaked(_msgSender(), _numberOfTokens, signature1); } function getMintCount(address _address) external view returns (uint256) { return m_MintCountList[_address]; } /////////////////////////////////////////////////////////////////// function resetTokenIdCounter() external onlyOwner { m_TokenIdCounter.reset(); } function getCurrentSupply() external view returns (uint256) { return m_BaseCounter.add(m_TokenIdCounter.current()); } function setMintEnabled(bool _enabled) external onlyOwner { m_IsMintable = _enabled; } function getMintEnabled() external view returns (bool) { return m_IsMintable; } function setMaxMintPerAddress(uint256 _maxMintPerAddress) external onlyOwner { m_MaxMintPerAddress = _maxMintPerAddress; } function getMaxMintPerAddress() external view returns (uint256) { return m_MaxMintPerAddress; } function setMintPrice(uint256 _mintPrice) external onlyOwner { m_MintPrice = _mintPrice * (10**18); } function getMintPrice() external view returns (uint256) { return m_MintPrice.div(10**18); } function setBaseCounter(uint256 _baseCounter) external onlyOwner { m_BaseCounter = _baseCounter; } function getBaseCounter() external view returns (uint256) { return m_BaseCounter; } function setMintSupply(uint256 _mintSupply) external onlyOwner { m_MintSupply = _mintSupply; } function getMintSupply() external view returns (uint256) { return m_MintSupply; } function getDropSupply() external view returns (uint256) { return m_MintSupply.add(m_BaseCounter); } function setSignatureLifeTime(uint256 _signatureLifeTime) external onlyOwner { m_SignatureLifeTime = _signatureLifeTime; } function getSignatureLifeTime() external view returns (uint256) { return m_SignatureLifeTime; } // ######## SIGN ######### function getMessageHash( address _address, uint256 _amount, uint256 _time, uint256 _counter ) public pure returns (bytes32) { return keccak256(abi.encodePacked(_address, _amount, _time, _counter)); } function splitSignature(bytes memory sig) public pure returns ( bytes32 r, bytes32 s, uint8 v ) { require(sig.length == 65, "invalid signature length"); assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) v := byte(0, mload(add(sig, 96))) } } function getEthSignedMessageHash(bytes32 _messageHash) public pure returns (bytes32) { return keccak256( abi.encodePacked( "\x19Ethereum Signed Message:\n32", _messageHash ) ); } function recoverSigner( bytes32 _ethSignedMessageHash, bytes memory _signature ) public pure returns (address) { (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature); return ecrecover(_ethSignedMessageHash, v, r, s); } // ######## MSK & BANK & VERIFY ######### function setMskContract(address _address) external onlyOwner { m_MSK = _address; } function getMskContract() external view returns (address) { return m_MSK; } function setBearlabContract(address _address) external onlyOwner { m_BearLab = _address; } function getBearlabContract() external view returns (address) { return m_BearLab; } function setVerifyAddress1(address _address) external onlyOwner { m_Verify1 = _address; } function getVerfiyAddress1() external view returns (address) { return m_Verify1; } function setVerifyAddress2(address _address) external onlyOwner { m_Verify2 = _address; } function getVerfiyAddress2() external view returns (address) { return m_Verify2; } //////////////////////////////////////////////////////////////// function withdrawMsk() external onlyOwner { IERC20(m_MSK).transfer(owner(), IERC20(m_MSK).balanceOf(address(this))); } }
// SPDX-License-Identifier: MIT pragma solidity ^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); }
// SPDX-License-Identifier: MIT 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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { 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 { _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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } }
// SPDX-License-Identifier: MIT 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" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"signature","type":"bytes"}],"name":"MintByStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"MintByWallet","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":[],"name":"getBaseCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBearlabContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDropSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_messageHash","type":"bytes32"}],"name":"getEthSignedMessageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMaxMintPerAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_time","type":"uint256"},{"internalType":"uint256","name":"_counter","type":"uint256"}],"name":"getMessageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMskContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSignatureLifeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVerfiyAddress1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVerfiyAddress2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numberOfTokens","type":"uint256"},{"internalType":"uint256","name":"_time","type":"uint256"},{"internalType":"bytes","name":"signature1","type":"bytes"},{"internalType":"bytes","name":"signature2","type":"bytes"}],"name":"mintByStaked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numberOfTokens","type":"uint256"}],"name":"mintByWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_ethSignedMessageHash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"recoverSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resetTokenIdCounter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_baseCounter","type":"uint256"}],"name":"setBaseCounter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setBearlabContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintPerAddress","type":"uint256"}],"name":"setMaxMintPerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintSupply","type":"uint256"}],"name":"setMintSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setMskContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_signatureLifeTime","type":"uint256"}],"name":"setSignatureLifeTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setVerifyAddress1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setVerifyAddress2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"splitSignature","outputs":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawMsk","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600280546001600160a01b03199081167372d7b17bf63322a943d4a2873310a83dcdbc3c8d17909155600380546001600160a81b03191673fc6dfea7e513dd4cb554032418b3b9f01cd242741790556004805569152d02c7e14af68000006005556065600655610d056007556008805482167327798f382f4ee811b12f79e5e3035fb5134b3dbf17905560098054909116737f5467fd11f4c7c7f143b03883cda5432545dc1317905561012c600a553480156100bf57600080fd5b506100c9336100ce565b61011e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6115448061012d6000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c806398f20f6e1161011a578063dcf53121116100ad578063f46a04eb1161007c578063f46a04eb1461042e578063f4a0a52814610441578063f98a726914610454578063fa54080114610465578063fb3133631461047857600080fd5b8063dcf53121146103ef578063e8fec3f414610400578063f2fde38b14610408578063f440be041461041b57600080fd5b8063a7f93ebd116100e9578063a7f93ebd146103b9578063a8eb2f2d146103c1578063ac568e84146103c9578063b8b8bd18146103dc57600080fd5b806398f20f6e146103445780639a94b01d14610357578063a2801f571461035f578063a7bb58031461038857600080fd5b806331263abd1161019d57806359f32c981161016c57806359f32c98146102f35780636ffd0c97146102fb578063715018a6146103185780638da5cb5b1461032057806397aba7f91461033157600080fd5b806331263abd146102a25780633644d821146102c75780633d38eb1f146102d85780634f3e1efc146102eb57600080fd5b80631add192d116101d95780631add192d146102565780631e14d44b146102695780632817b3ad1461027c5780632c222fe21461028f57600080fd5b80630503d4391461020b5780630663dc6e146102205780630d011dec146102335780630fa5d7641461024e575b600080fd5b61021e610219366004611192565b610480565b005b61021e61022e3660046111ad565b6104d5565b61023b610772565b6040519081526020015b60405180910390f35b60065461023b565b61021e610264366004611192565b610790565b61021e6102773660046111ad565b6107dc565b61021e61028a366004611269565b61080b565b61021e61029d3660046111ad565b610a1c565b6003546001600160a01b03165b6040516001600160a01b039091168152602001610245565b6008546001600160a01b03166102af565b61021e6102e6366004611192565b610a4b565b61023b610a97565b61021e610aae565b600354600160a01b900460ff166040519015158152602001610245565b61021e610ae1565b6000546001600160a01b03166102af565b6102af61033f3660046112e0565b610b15565b61021e610352366004611192565b610b94565b61021e610be0565b61023b61036d366004611192565b6001600160a01b03166000908152600b602052604090205490565b61039b610396366004611327565b610d29565b60408051938452602084019290925260ff1690820152606001610245565b61023b610d9d565b600a5461023b565b61021e6103d73660046111ad565b610db5565b61021e6103ea3660046111ad565b610de4565b6002546001600160a01b03166102af565b60045461023b565b61021e610416366004611192565b610e13565b61023b610429366004611364565b610eab565b61021e61043c3660046113ab565b610f02565b61021e61044f3660046111ad565b610f4a565b6009546001600160a01b03166102af565b61023b6104733660046111ad565b610f8c565b60075461023b565b6000546001600160a01b031633146104b35760405162461bcd60e51b81526004016104aa906113c8565b60405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600354600160a01b900460ff1661051f5760405162461bcd60e51b815260206004820152600e60248201526d6d7573742062652061637469766560901b60448201526064016104aa565b6000811161052c57600080fd5b600061055782600b83335b6001600160a01b0316815260208101919091526040016000205490610fdf565b90506004548111156105a75760405162461bcd60e51b81526020600482015260196024820152784f766572204d6178204d696e7420706572204164647265737360381b60448201526064016104aa565b6002546005546001600160a01b03909116906000906105c69085610ff2565b9050806001600160a01b0383166370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561061857600080fd5b505afa15801561062c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065091906113fd565b101561069e5760405162461bcd60e51b815260206004820152601960248201527f4d736b2062616c616e6365206973206e6f7420656e6f7567680000000000000060448201526064016104aa565b6001600160a01b0382166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101849052606401602060405180830381600087803b1580156106fc57600080fd5b505af1158015610710573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107349190611416565b5061073f3385610ffe565b604051849033907f873881ba7b3b90c36e22b1a4b83612362541b529bbe233fa9d6c5d58302a52ba90600090a350505050565b600061078b600754600654610fdf90919063ffffffff16565b905090565b6000546001600160a01b031633146107ba5760405162461bcd60e51b81526004016104aa906113c8565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146108065760405162461bcd60e51b81526004016104aa906113c8565b600455565b600354600160a01b900460ff166108555760405162461bcd60e51b815260206004820152600e60248201526d6d7573742062652061637469766560901b60448201526064016104aa565b6000841161086257600080fd5b600061087185600b8333610537565b90506004548111156108c15760405162461bcd60e51b81526020600482015260196024820152784f766572204d6178204d696e7420706572204164647265737360381b60448201526064016104aa565b336000818152600b602052604081205490916108e09188908890610eab565b905060006108ed82610f8c565b6008549091506001600160a01b03166109068287610b15565b6001600160a01b0316146109505760405162461bcd60e51b8152602060048201526011602482015270446966666572656e74207369676e65723160781b60448201526064016104aa565b6009546001600160a01b03166109668286610b15565b6001600160a01b0316146109b05760405162461bcd60e51b81526020600482015260116024820152702234b33332b932b73a1039b4b3b732b91960791b60448201526064016104aa565b600a546109bd8742611449565b106109c757600080fd5b6109d13388610ffe565b86336001600160a01b03167fd48acb4a34b9c76d9122f85f66a8257ca2ab3efd0c60838f65361386b36ea6ee87604051610a0b9190611460565b60405180910390a350505050505050565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016104aa906113c8565b600a55565b6000546001600160a01b03163314610a755760405162461bcd60e51b81526004016104aa906113c8565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600061078b610aa560015490565b60075490610fdf565b6000546001600160a01b03163314610ad85760405162461bcd60e51b81526004016104aa906113c8565b6000600155565b565b6000546001600160a01b03163314610b0b5760405162461bcd60e51b81526004016104aa906113c8565b610adf6000611023565b600080600080610b2485610d29565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015610b7f573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6000546001600160a01b03163314610bbe5760405162461bcd60e51b81526004016104aa906113c8565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c0a5760405162461bcd60e51b81526004016104aa906113c8565b6002546001600160a01b031663a9059cbb610c2d6000546001600160a01b031690565b6002546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015610c7057600080fd5b505afa158015610c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca891906113fd565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d269190611416565b50565b60008060008351604114610d7f5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e677468000000000000000060448201526064016104aa565b50505060208101516040820151606090920151909260009190911a90565b60055460009061078b90670de0b6b3a7640000611073565b6000546001600160a01b03163314610ddf5760405162461bcd60e51b81526004016104aa906113c8565b600655565b6000546001600160a01b03163314610e0e5760405162461bcd60e51b81526004016104aa906113c8565b600755565b6000546001600160a01b03163314610e3d5760405162461bcd60e51b81526004016104aa906113c8565b6001600160a01b038116610ea25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104aa565b610d2681611023565b6040516bffffffffffffffffffffffff19606086901b166020820152603481018490526054810183905260748101829052600090609401604051602081830303815290604052805190602001209050949350505050565b6000546001600160a01b03163314610f2c5760405162461bcd60e51b81526004016104aa906113c8565b60038054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b03163314610f745760405162461bcd60e51b81526004016104aa906113c8565b610f8681670de0b6b3a76400006114b5565b60055550565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b6000610feb82846114d4565b9392505050565b6000610feb82846114b5565b801561101f5761100d8261107f565b61101881600161116a565b9050610ffe565b5050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610feb82846114ec565b61108d600180546001019055565b600061109b610aa560015490565b90506110b4600654600754610fdf90919063ffffffff16565b8111156110c057600080fd5b6003546040516301f471ad60e41b81526001600160a01b0384811660048301526024820184905290911690631f471ad090604401600060405180830381600087803b15801561110e57600080fd5b505af1158015611122573d6000803e3d6000fd5b5050506001600160a01b0383166000908152600b602052604090205461114a91506001610fdf565b6001600160a01b039092166000908152600b602052604090209190915550565b6000610feb8284611449565b80356001600160a01b038116811461118d57600080fd5b919050565b6000602082840312156111a457600080fd5b610feb82611176565b6000602082840312156111bf57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126111ed57600080fd5b813567ffffffffffffffff80821115611208576112086111c6565b604051601f8301601f19908116603f01168101908282118183101715611230576112306111c6565b8160405283815286602085880101111561124957600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561127f57600080fd5b8435935060208501359250604085013567ffffffffffffffff808211156112a557600080fd5b6112b1888389016111dc565b935060608701359150808211156112c757600080fd5b506112d4878288016111dc565b91505092959194509250565b600080604083850312156112f357600080fd5b82359150602083013567ffffffffffffffff81111561131157600080fd5b61131d858286016111dc565b9150509250929050565b60006020828403121561133957600080fd5b813567ffffffffffffffff81111561135057600080fd5b61135c848285016111dc565b949350505050565b6000806000806080858703121561137a57600080fd5b61138385611176565b966020860135965060408601359560600135945092505050565b8015158114610d2657600080fd5b6000602082840312156113bd57600080fd5b8135610feb8161139d565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561140f57600080fd5b5051919050565b60006020828403121561142857600080fd5b8151610feb8161139d565b634e487b7160e01b600052601160045260246000fd5b60008282101561145b5761145b611433565b500390565b600060208083528351808285015260005b8181101561148d57858101830151858201604001528201611471565b8181111561149f576000604083870101525b50601f01601f1916929092016040019392505050565b60008160001904831182151516156114cf576114cf611433565b500290565b600082198211156114e7576114e7611433565b500190565b60008261150957634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220ed3c594b5ccd760385ccb8e680464e88432e72406ba3fa9ef621fcf715455fb564736f6c63430008090033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102065760003560e01c806398f20f6e1161011a578063dcf53121116100ad578063f46a04eb1161007c578063f46a04eb1461042e578063f4a0a52814610441578063f98a726914610454578063fa54080114610465578063fb3133631461047857600080fd5b8063dcf53121146103ef578063e8fec3f414610400578063f2fde38b14610408578063f440be041461041b57600080fd5b8063a7f93ebd116100e9578063a7f93ebd146103b9578063a8eb2f2d146103c1578063ac568e84146103c9578063b8b8bd18146103dc57600080fd5b806398f20f6e146103445780639a94b01d14610357578063a2801f571461035f578063a7bb58031461038857600080fd5b806331263abd1161019d57806359f32c981161016c57806359f32c98146102f35780636ffd0c97146102fb578063715018a6146103185780638da5cb5b1461032057806397aba7f91461033157600080fd5b806331263abd146102a25780633644d821146102c75780633d38eb1f146102d85780634f3e1efc146102eb57600080fd5b80631add192d116101d95780631add192d146102565780631e14d44b146102695780632817b3ad1461027c5780632c222fe21461028f57600080fd5b80630503d4391461020b5780630663dc6e146102205780630d011dec146102335780630fa5d7641461024e575b600080fd5b61021e610219366004611192565b610480565b005b61021e61022e3660046111ad565b6104d5565b61023b610772565b6040519081526020015b60405180910390f35b60065461023b565b61021e610264366004611192565b610790565b61021e6102773660046111ad565b6107dc565b61021e61028a366004611269565b61080b565b61021e61029d3660046111ad565b610a1c565b6003546001600160a01b03165b6040516001600160a01b039091168152602001610245565b6008546001600160a01b03166102af565b61021e6102e6366004611192565b610a4b565b61023b610a97565b61021e610aae565b600354600160a01b900460ff166040519015158152602001610245565b61021e610ae1565b6000546001600160a01b03166102af565b6102af61033f3660046112e0565b610b15565b61021e610352366004611192565b610b94565b61021e610be0565b61023b61036d366004611192565b6001600160a01b03166000908152600b602052604090205490565b61039b610396366004611327565b610d29565b60408051938452602084019290925260ff1690820152606001610245565b61023b610d9d565b600a5461023b565b61021e6103d73660046111ad565b610db5565b61021e6103ea3660046111ad565b610de4565b6002546001600160a01b03166102af565b60045461023b565b61021e610416366004611192565b610e13565b61023b610429366004611364565b610eab565b61021e61043c3660046113ab565b610f02565b61021e61044f3660046111ad565b610f4a565b6009546001600160a01b03166102af565b61023b6104733660046111ad565b610f8c565b60075461023b565b6000546001600160a01b031633146104b35760405162461bcd60e51b81526004016104aa906113c8565b60405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b600354600160a01b900460ff1661051f5760405162461bcd60e51b815260206004820152600e60248201526d6d7573742062652061637469766560901b60448201526064016104aa565b6000811161052c57600080fd5b600061055782600b83335b6001600160a01b0316815260208101919091526040016000205490610fdf565b90506004548111156105a75760405162461bcd60e51b81526020600482015260196024820152784f766572204d6178204d696e7420706572204164647265737360381b60448201526064016104aa565b6002546005546001600160a01b03909116906000906105c69085610ff2565b9050806001600160a01b0383166370a08231336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260240160206040518083038186803b15801561061857600080fd5b505afa15801561062c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065091906113fd565b101561069e5760405162461bcd60e51b815260206004820152601960248201527f4d736b2062616c616e6365206973206e6f7420656e6f7567680000000000000060448201526064016104aa565b6001600160a01b0382166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b03909116600482015230602482015260448101849052606401602060405180830381600087803b1580156106fc57600080fd5b505af1158015610710573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107349190611416565b5061073f3385610ffe565b604051849033907f873881ba7b3b90c36e22b1a4b83612362541b529bbe233fa9d6c5d58302a52ba90600090a350505050565b600061078b600754600654610fdf90919063ffffffff16565b905090565b6000546001600160a01b031633146107ba5760405162461bcd60e51b81526004016104aa906113c8565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146108065760405162461bcd60e51b81526004016104aa906113c8565b600455565b600354600160a01b900460ff166108555760405162461bcd60e51b815260206004820152600e60248201526d6d7573742062652061637469766560901b60448201526064016104aa565b6000841161086257600080fd5b600061087185600b8333610537565b90506004548111156108c15760405162461bcd60e51b81526020600482015260196024820152784f766572204d6178204d696e7420706572204164647265737360381b60448201526064016104aa565b336000818152600b602052604081205490916108e09188908890610eab565b905060006108ed82610f8c565b6008549091506001600160a01b03166109068287610b15565b6001600160a01b0316146109505760405162461bcd60e51b8152602060048201526011602482015270446966666572656e74207369676e65723160781b60448201526064016104aa565b6009546001600160a01b03166109668286610b15565b6001600160a01b0316146109b05760405162461bcd60e51b81526020600482015260116024820152702234b33332b932b73a1039b4b3b732b91960791b60448201526064016104aa565b600a546109bd8742611449565b106109c757600080fd5b6109d13388610ffe565b86336001600160a01b03167fd48acb4a34b9c76d9122f85f66a8257ca2ab3efd0c60838f65361386b36ea6ee87604051610a0b9190611460565b60405180910390a350505050505050565b6000546001600160a01b03163314610a465760405162461bcd60e51b81526004016104aa906113c8565b600a55565b6000546001600160a01b03163314610a755760405162461bcd60e51b81526004016104aa906113c8565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600061078b610aa560015490565b60075490610fdf565b6000546001600160a01b03163314610ad85760405162461bcd60e51b81526004016104aa906113c8565b6000600155565b565b6000546001600160a01b03163314610b0b5760405162461bcd60e51b81526004016104aa906113c8565b610adf6000611023565b600080600080610b2485610d29565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015610b7f573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6000546001600160a01b03163314610bbe5760405162461bcd60e51b81526004016104aa906113c8565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c0a5760405162461bcd60e51b81526004016104aa906113c8565b6002546001600160a01b031663a9059cbb610c2d6000546001600160a01b031690565b6002546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015610c7057600080fd5b505afa158015610c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca891906113fd565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d269190611416565b50565b60008060008351604114610d7f5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e677468000000000000000060448201526064016104aa565b50505060208101516040820151606090920151909260009190911a90565b60055460009061078b90670de0b6b3a7640000611073565b6000546001600160a01b03163314610ddf5760405162461bcd60e51b81526004016104aa906113c8565b600655565b6000546001600160a01b03163314610e0e5760405162461bcd60e51b81526004016104aa906113c8565b600755565b6000546001600160a01b03163314610e3d5760405162461bcd60e51b81526004016104aa906113c8565b6001600160a01b038116610ea25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104aa565b610d2681611023565b6040516bffffffffffffffffffffffff19606086901b166020820152603481018490526054810183905260748101829052600090609401604051602081830303815290604052805190602001209050949350505050565b6000546001600160a01b03163314610f2c5760405162461bcd60e51b81526004016104aa906113c8565b60038054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b03163314610f745760405162461bcd60e51b81526004016104aa906113c8565b610f8681670de0b6b3a76400006114b5565b60055550565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b6000610feb82846114d4565b9392505050565b6000610feb82846114b5565b801561101f5761100d8261107f565b61101881600161116a565b9050610ffe565b5050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610feb82846114ec565b61108d600180546001019055565b600061109b610aa560015490565b90506110b4600654600754610fdf90919063ffffffff16565b8111156110c057600080fd5b6003546040516301f471ad60e41b81526001600160a01b0384811660048301526024820184905290911690631f471ad090604401600060405180830381600087803b15801561110e57600080fd5b505af1158015611122573d6000803e3d6000fd5b5050506001600160a01b0383166000908152600b602052604090205461114a91506001610fdf565b6001600160a01b039092166000908152600b602052604090209190915550565b6000610feb8284611449565b80356001600160a01b038116811461118d57600080fd5b919050565b6000602082840312156111a457600080fd5b610feb82611176565b6000602082840312156111bf57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126111ed57600080fd5b813567ffffffffffffffff80821115611208576112086111c6565b604051601f8301601f19908116603f01168101908282118183101715611230576112306111c6565b8160405283815286602085880101111561124957600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561127f57600080fd5b8435935060208501359250604085013567ffffffffffffffff808211156112a557600080fd5b6112b1888389016111dc565b935060608701359150808211156112c757600080fd5b506112d4878288016111dc565b91505092959194509250565b600080604083850312156112f357600080fd5b82359150602083013567ffffffffffffffff81111561131157600080fd5b61131d858286016111dc565b9150509250929050565b60006020828403121561133957600080fd5b813567ffffffffffffffff81111561135057600080fd5b61135c848285016111dc565b949350505050565b6000806000806080858703121561137a57600080fd5b61138385611176565b966020860135965060408601359560600135945092505050565b8015158114610d2657600080fd5b6000602082840312156113bd57600080fd5b8135610feb8161139d565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561140f57600080fd5b5051919050565b60006020828403121561142857600080fd5b8151610feb8161139d565b634e487b7160e01b600052601160045260246000fd5b60008282101561145b5761145b611433565b500390565b600060208083528351808285015260005b8181101561148d57858101830151858201604001528201611471565b8181111561149f576000604083870101525b50601f01601f1916929092016040019392505050565b60008160001904831182151516156114cf576114cf611433565b500290565b600082198211156114e7576114e7611433565b500190565b60008261150957634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220ed3c594b5ccd760385ccb8e680464e88432e72406ba3fa9ef621fcf715455fb564736f6c63430008090033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.