ERC-20
Decentralized Web
Overview
Max Total Supply
21,083,244 SPRING
Holders
855 (0.00%)
Market
Price
$0.00 @ 0.000001 ETH (+5.35%)
Onchain Market Cap
$74,913.87
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SpringToken
Compiler Version
v0.8.5+commit.a4f2e591
Contract Source Code (Solidity Multiple files format)
//SPDX-License-Identifier: MIT pragma solidity 0.8.5; import "./ERC20.sol"; import "./ERC918.sol"; import "./Owned.sol"; import "./ApproveAndCallFallBack.sol"; // ---------------------------------------------------------------------------- // 'Spring Token' contract // ERC20 & ERC918 Mineable Token using Proof Of Work // Symbol : SPRING // Name : Spring Token // Total supply: 33,112,800.00 // Decimals : 18 // Initial mining reward: 168 // Fraction of total supply released before first halving: 1/5 // ---------------------------------------------------------------------------- contract SpringToken is ERC20Interface, ERC918, Owned { string private constant SYMBOL = "SPRING"; string private constant NAME = "Spring Token"; uint256 public constant TOKEN_IDENTIFIER = 1; uint8 public constant DECIMALS = 18; uint256 public constant TOTAL_SUPPLY = 33112800 * 10**18; uint256 public constant INITIAL_REWARD = 168 * 10**18; uint256 public constant MAX_REWARDS_AVAILABLE = 72; // no more than 72 rewards per mint uint256 public constant REWARD_INTERVAL = 600; // rewards every ten minutes on average uint256 public constant DURATION_OF_FIRST_ERA = (365 * 24 * 60 * 60 * 3) / 4; // 9 months uint256 public constant DURATION_OF_ERA = 3 * 365 * 24 * 60 * 60; // three years uint256 public constant MINIMUM_TARGET = 2**16; uint256 public constant MAXIMUM_TARGET = 2**234; uint256 public immutable contractCreationTime; uint256 public lastRewardBlockTime; uint256 public maxNumberOfRewardsPerMint; bytes32 private challengeNumber; uint256 private miningTarget; uint256 public tokensMinted; mapping(address => uint256) internal balances; mapping(address => mapping(address => uint256)) internal allowed; constructor() { miningTarget = MAXIMUM_TARGET / 2**19; contractCreationTime = block.timestamp; lastRewardBlockTime = block.timestamp; maxNumberOfRewardsPerMint = 1; challengeNumber = _getNewChallengeNumber(0); } function name() public pure returns (string memory) { return NAME; } function symbol() public pure returns (string memory) { return SYMBOL; } function mint(uint256 nonce) override public returns (bool success) { uint256 _lastRewardBlockTime = lastRewardBlockTime; uint256 singleRewardAmount = _getMiningReward(_lastRewardBlockTime); // no more minting when reward reaches zero if (singleRewardAmount == 0) revert("Reward has reached zero"); // the PoW must contain work that includes the challenge number and the msg.sender's address bytes32 digest = keccak256(abi.encodePacked(challengeNumber, msg.sender, nonce)); uint256 _miningTarget = miningTarget; // the digest must be smaller than the target if (uint256(digest) > _miningTarget) revert("Digest is larger than mining target"); uint256 _previousMaxNumberOfRewards = maxNumberOfRewardsPerMint; uint256 numberOfRewardsToGive = _numberOfRewardsToGive(_miningTarget / uint256(digest), _lastRewardBlockTime, _previousMaxNumberOfRewards, block.timestamp); uint256 totalRewardAmount = singleRewardAmount * numberOfRewardsToGive; uint256 _tokensMinted = _giveRewards(totalRewardAmount); _setNextMaxNumberOfRewards(numberOfRewardsToGive, _previousMaxNumberOfRewards); miningTarget = _adjustDifficulty(_miningTarget, _lastRewardBlockTime, numberOfRewardsToGive, block.timestamp); bytes32 newChallengeNumber = _getNewChallengeNumber(_tokensMinted); challengeNumber = newChallengeNumber; lastRewardBlockTime = block.timestamp; emit Mint(msg.sender, totalRewardAmount, _scheduledNumberOfRewards(block.timestamp), newChallengeNumber); return true; } function _numberOfRewardsAvailable(uint256 _lastRewardBlockTime, uint256 _previousMaxNumberOfRewards, uint256 currentTime) internal pure returns (uint256) { uint256 numberAvailable = _previousMaxNumberOfRewards; uint256 intervalsSinceLastReward = (currentTime - _lastRewardBlockTime) / REWARD_INTERVAL; if (intervalsSinceLastReward > numberAvailable) numberAvailable = intervalsSinceLastReward; if (numberAvailable > MAX_REWARDS_AVAILABLE) numberAvailable = MAX_REWARDS_AVAILABLE; return numberAvailable; } function _numberOfRewardsToGive(uint256 numberEarned, uint256 _lastRewardBlockTime, uint256 _previousMaxNumberOfRewards, uint256 currentTime) internal pure returns (uint256) { uint256 numberAvailable = _numberOfRewardsAvailable(_lastRewardBlockTime, _previousMaxNumberOfRewards, currentTime); if (numberEarned < numberAvailable) return numberEarned; return numberAvailable; } function _giveRewards(uint256 totalReward) internal returns (uint256) { balances[msg.sender] += totalReward; uint256 _tokensMinted = tokensMinted + totalReward; tokensMinted = _tokensMinted; return _tokensMinted; } function _setNextMaxNumberOfRewards(uint256 numberOfRewardsGivenNow, uint256 _previousMaxNumberOfRewards) internal { // the value of the rewards given to this miner presumably exceed the gas costs // for processing the transaction. the next miner can submit a proof of enough work // to claim up to the same number of rewards immediately, or, if gas costs have increased, // wait until the maximum number of rewards claimable has increased enough to overcome // the costs. if (numberOfRewardsGivenNow != _previousMaxNumberOfRewards) maxNumberOfRewardsPerMint = numberOfRewardsGivenNow; } // backwards compatible mint function function mint(uint256 _nonce, bytes32 _challengeDigest) external returns (bool) { bytes32 digest = keccak256(abi.encodePacked(challengeNumber, msg.sender, _nonce)); require(digest == _challengeDigest, "Challenge digest does not match expected digest on token contract"); return mint(_nonce); } function _getNewChallengeNumber(uint256 _tokensMinted) internal view returns (bytes32) { // make the latest ethereum block hash a part of the next challenge // xor with a number unique to this token to avoid merged mining // xor with the number of tokens minted to ensure that the challenge changes // even if there are multiple mints in the same ethereum block return bytes32(uint256(blockhash(block.number - 1)) ^ _tokensMinted ^ TOKEN_IDENTIFIER); } function _scheduledNumberOfRewards(uint256 currentTime) internal view returns (uint256) { return (currentTime - contractCreationTime) / REWARD_INTERVAL; } function _adjustDifficulty(uint256 _miningTarget, uint256 _lastRewardBlockTime, uint256 rewardsGivenNow, uint256 currentTime) internal pure returns (uint256){ uint256 timeSinceLastReward = currentTime - _lastRewardBlockTime; // we target a median interval of 10 minutes multiplied by log(2) ~ 61/88 // this gives a mean interval of 10 minutes per reward if (timeSinceLastReward * 88 < rewardsGivenNow * REWARD_INTERVAL * 61) _miningTarget = (_miningTarget * 99) / 100; // slow down else _miningTarget = (_miningTarget * 100) / 99; // speed up if (_miningTarget < MINIMUM_TARGET) _miningTarget = MINIMUM_TARGET; if (_miningTarget > MAXIMUM_TARGET) _miningTarget = MAXIMUM_TARGET; return _miningTarget; } function rewardEra(uint256 _time) public view returns (uint256) { uint256 timeSinceContractCreation = _time - contractCreationTime; if (timeSinceContractCreation < DURATION_OF_FIRST_ERA) return 0; else return 1 + (timeSinceContractCreation - DURATION_OF_FIRST_ERA) / DURATION_OF_ERA; } function getAdjustmentInterval() public view override returns (uint256) { return REWARD_INTERVAL * maxNumberOfRewardsPerMint; } function getChallengeNumber() public view override returns (bytes32) { return challengeNumber; } function getMiningDifficulty() public view override returns (uint256) { // 64 f's: 1234567890123456789012345678901234567890123456789012345678901234 uint256 maxInt = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; return maxInt / miningTarget; } function getMiningTarget() public view override returns (uint256) { return miningTarget; } function getMiningReward() public view override returns (uint256) { // use the timestamp of the ethereum block that gave the last reward // because ethereum miners can manipulate the value of block.timestamp return _getMiningReward(lastRewardBlockTime); } function _getMiningReward(uint256 _time) internal view returns (uint256) { return INITIAL_REWARD / 2**rewardEra(_time); } function getNumberOfRewardsAvailable(uint256 currentTime) external view returns (uint256) { return _numberOfRewardsAvailable(lastRewardBlockTime, maxNumberOfRewardsPerMint, currentTime); } function getRewardAmountForAchievingTarget(uint256 targetAchieved, uint256 currentTime) external view returns (uint256) { uint256 numberOfRewardsToGive = _numberOfRewardsToGive(miningTarget / targetAchieved, lastRewardBlockTime, maxNumberOfRewardsPerMint, currentTime); return _getMiningReward(currentTime) * numberOfRewardsToGive; } function decimals() public pure override returns (uint8) { return DECIMALS; } function totalSupply() public view override returns (uint256) { return tokensMinted; } // ------------------------------------------------------------------------ // Get the token balance for account `tokenOwner` // ------------------------------------------------------------------------ function balanceOf(address tokenOwner) public view override returns (uint256 balance) { return balances[tokenOwner]; } // ------------------------------------------------------------------------ // Transfer the balance from token owner's account to `to` account // - Owner's account must have sufficient balance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transfer(address to, uint256 tokens) public override returns (bool success) { require(to != address(0) && to != address(this), "Invalid address"); balances[msg.sender] = balances[msg.sender] - tokens; balances[to] = balances[to] + tokens; emit Transfer(msg.sender, to, tokens); return true; } // ------------------------------------------------------------------------ // Token owner can approve for `spender` to transferFrom(...) `tokens` // from the token owner's account // // Warning: This function is vulnerable to double-spend attacks and is // included for backwards compatibility. Use safeApprove instead. // ------------------------------------------------------------------------ function approve(address spender, uint256 tokens) public override returns (bool success) { require(spender != address(0) && spender != address(this), "Invalid address"); allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } // ------------------------------------------------------------------------ // Allow token owner to cancel the approval if the approved amount changes from its last // known value before this transaction is processed. This allows the owner to avoid // unintentionally re-approving funds that have already been spent. // ------------------------------------------------------------------------ function safeApprove(address spender, uint256 previousAllowance, uint256 newAllowance) external returns (bool success) { require(allowed[msg.sender][spender] == previousAllowance, "Current spender allowance does not match specified value"); return approve(spender, newAllowance); } // ------------------------------------------------------------------------ // Transfer `tokens` from the `from` account to the `to` account // // The calling account must already have sufficient tokens approve(...)-d // for spending from the `from` account and // - From account must have sufficient balance to transfer // - Spender must have sufficient allowance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transferFrom(address from, address to, uint256 tokens) public override returns (bool success) { require(to != address(0) && to != address(this), "Invalid address"); balances[from] = balances[from] - tokens; allowed[from][msg.sender] = allowed[from][msg.sender] - tokens; balances[to] = balances[to] + tokens; emit Transfer(from, to, tokens); return true; } // ------------------------------------------------------------------------ // Returns the amount of tokens approved by the owner that can be // transferred to the spender's account // ------------------------------------------------------------------------ function allowance(address tokenOwner, address spender) public view override returns (uint256 remaining){ return allowed[tokenOwner][spender]; } // ------------------------------------------------------------------------ // Token owner can approve for `spender` to transferFrom(...) `tokens` // from the token owner's account. The `spender` contract function // `receiveApproval(...)` is then executed. This is vulnerable to double-spend attacks // when called directly, so it is declared internal and called by safeApproveAndCall // ------------------------------------------------------------------------ function approveAndCall(address spender, uint256 tokens, bytes memory data) internal returns (bool success) { require(spender != address(0) && spender != address(this), "Invalid address"); allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, address(this), data); return true; } // ------------------------------------------------------------------------ // Allow safe approvals with calls to receiving contract // ------------------------------------------------------------------------ function safeApproveAndCall(address spender, uint256 previousAllowance, uint256 newAllowance, bytes memory data) external returns (bool success) { require(allowed[msg.sender][spender] == previousAllowance, "Current spender allowance does not match specified value"); return approveAndCall(spender, newAllowance, data); } // ------------------------------------------------------------------------ // Owner can transfer out any accidentally sent ERC20 tokens // ------------------------------------------------------------------------ function transferAnyERC20Token(address tokenAddress, uint256 tokens) external onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }
//SPDX-License-Identifier: MIT pragma solidity 0.8.5; // ---------------------------------------------------------------------------- // Contract function to receive approval and execute function in one call // Borrowed from MiniMeToken // ---------------------------------------------------------------------------- abstract contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes memory data) public virtual ; }
//SPDX-License-Identifier: MIT pragma solidity 0.8.5; // ---------------------------------------------------------------------------- // ERC Token Standard #20 Interface // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ---------------------------------------------------------------------------- abstract contract ERC20Interface { function totalSupply() public view virtual returns (uint); function balanceOf(address tokenOwner) public view virtual returns (uint balance); function allowance(address tokenOwner, address spender) public view virtual returns (uint remaining); function transfer(address to, uint tokens) public virtual returns (bool success); function approve(address spender, uint tokens) public virtual returns (bool success); function transferFrom(address from, address to, uint tokens) public virtual returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); }
//SPDX-License-Identifier: MIT pragma solidity 0.8.5; // ---------------------------------------------------------------------------- // ERC Token Standard #918 Interface // https://eips.ethereum.org/EIPS/eip-918 // ---------------------------------------------------------------------------- interface ERC918 { function mint(uint256 nonce) external returns (bool success); function getAdjustmentInterval() external view returns (uint); function getChallengeNumber() external view returns (bytes32); function getMiningDifficulty() external view returns (uint); function getMiningTarget() external view returns (uint); function getMiningReward() external view returns (uint); function decimals() external view returns (uint8); event Mint(address indexed from, uint rewardAmount, uint epochCount, bytes32 newChallengeNumber); }
//SPDX-License-Identifier: MIT pragma solidity 0.8.5; // ---------------------------------------------------------------------------- // Owned contract // ---------------------------------------------------------------------------- abstract contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); constructor() { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { require(_newOwner != address(0), "Invalid address"); newOwner = _newOwner; } function acceptOwnership() external { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenOwner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"epochCount","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"newChallengeNumber","type":"bytes32"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DECIMALS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DURATION_OF_ERA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DURATION_OF_FIRST_ERA","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INITIAL_REWARD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAXIMUM_TARGET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_REWARDS_AVAILABLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_TARGET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_IDENTIFIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"remaining","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenOwner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractCreationTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getAdjustmentInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getChallengeNumber","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningDifficulty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMiningTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"currentTime","type":"uint256"}],"name":"getNumberOfRewardsAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"targetAchieved","type":"uint256"},{"internalType":"uint256","name":"currentTime","type":"uint256"}],"name":"getRewardAmountForAchievingTarget","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardBlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxNumberOfRewardsPerMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"bytes32","name":"_challengeDigest","type":"bytes32"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"newOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"rewardEra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"previousAllowance","type":"uint256"},{"internalType":"uint256","name":"newAllowance","type":"uint256"}],"name":"safeApprove","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"previousAllowance","type":"uint256"},{"internalType":"uint256","name":"newAllowance","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeApproveAndCall","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405234801561001057600080fd5b50600080546001600160a01b0319163317905561003462080000600160ea1b61006f565b600555426080819052600255600160035561004f6000610057565b6004556100b6565b60006001826100668243610091565b40181892915050565b60008261008c57634e487b7160e01b600052601260045260246000fd5b500490565b6000828210156100b157634e487b7160e01b600052601160045260246000fd5b500390565b6080516115b0620000e06000396000818161047e01528181610bff015261106c01526115b06000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c806379ba50971161013b578063cea3e530116100b8578063ef08fc6e1161007c578063ef08fc6e14610507578063f2fde38b14610512578063f650366214610525578063f77e180e14610538578063f79875461461054257600080fd5b8063cea3e53014610479578063d390a1e4146104a0578063d4ee1d90146104a8578063dc39d06d146104bb578063dd62ed3e146104ce57600080fd5b80639fb68299116100ff5780639fb6829914610425578063a0712d6814610438578063a9059cbb1461044b578063aa3308bd1461045e578063c2d98c6e1461047157600080fd5b806379ba5097146103a95780638da5cb5b146103b35780638f759183146103de578063902d55a5146103f157806395d89b411461040357600080fd5b8063313ce567116101c95780634ef376281161018d5780634ef376281461035b57806357dd62fb146103635780635dbdda691461036e5780636de9f32b1461037757806370a082311461038057600080fd5b8063313ce5671461032b57806332e997081461033257806336bcf7d61461033a578063490203a71461034a5780634a1da80e1461035257600080fd5b806317da485f1161021057806317da485f146102db5780631801fbe5146102e357806318160ddd146102f657806323b872dd146102fe5780632e0f26251461031157600080fd5b8063031052f31461024d578063068a24951461026b57806306fdde031461028e578063095ea7b3146102bf5780630d97a2fb146102d2575b600080fd5b610258600160ea1b81565b6040519081526020015b60405180910390f35b61027e61027936600461119e565b61054a565b6040519015158152602001610262565b60408051808201909152600c81526b29b83934b733902a37b5b2b760a11b60208201525b604051610262919061135a565b61027e6102cd366004611141565b6105ab565b61025860035481565b610258610650565b61027e6102f13660046112ae565b61066a565b600654610258565b61027e61030c366004611105565b61073f565b610319601281565b60405160ff9091168152602001610262565b6012610319565b600554610258565b61025868091b77e5e5d9a0000081565b61025861087f565b61025860025481565b600454610258565b6102586305a39a8081565b61025861025881565b61025860065481565b61025861038e3660046110b7565b6001600160a01b031660009081526007602052604090205490565b6103b1610891565b005b6000546103c6906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b6102586103ec366004611295565b61090c565b6102586a1b63e87c1f629e3f80000081565b604080518082019091526006815265535052494e4760d01b60208201526102b2565b6102586104333660046112ae565b61091d565b61027e610446366004611295565b610953565b61027e610459366004611141565b610b1f565b61025861046c366004611295565b610bf7565b610258600181565b6102587f000000000000000000000000000000000000000000000000000000000000000081565b610258604881565b6001546103c6906001600160a01b031681565b61027e6104c9366004611141565b610c6a565b6102586104dc3660046110d2565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b610258630168e6a081565b6103b16105203660046110b7565b610d08565b61027e61053336600461116b565b610d67565b6102586201000081565b610258610db3565b3360009081526008602090815260408083206001600160a01b038816845290915281205484146105955760405162461bcd60e51b815260040161058c90611396565b60405180910390fd5b6105a0858484610dc5565b90505b949350505050565b60006001600160a01b038316158015906105ce57506001600160a01b0383163014155b6105ea5760405162461bcd60e51b815260040161058c9061136d565b3360008181526008602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060015b92915050565b60055460009060001990610664908261140b565b91505090565b6004546040805160208101929092526bffffffffffffffffffffffff193360601b16908201526054810183905260009081906074016040516020818303038152906040528051906020012090508281146107365760405162461bcd60e51b815260206004820152604160248201527f4368616c6c656e67652064696765737420646f6573206e6f74206d617463682060448201527f657870656374656420646967657374206f6e20746f6b656e20636f6e747261636064820152601d60fa1b608482015260a40161058c565b6105a384610953565b60006001600160a01b0383161580159061076257506001600160a01b0383163014155b61077e5760405162461bcd60e51b815260040161058c9061136d565b6001600160a01b0384166000908152600760205260409020546107a2908390611537565b6001600160a01b03851660009081526007602090815260408083209390935560088152828220338352905220546107da908390611537565b6001600160a01b0380861660009081526008602090815260408083203384528252808320949094559186168152600790915220546108199083906113f3565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061086d9086815260200190565b60405180910390a35060019392505050565b600061088c600254610ecd565b905090565b6001546001600160a01b031633146108a857600080fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b600061064a60025460035484610ef6565b60008061093d84600554610931919061140b565b60025460035486610f36565b90508061094984610ecd565b6105a39190611518565b6002546000908161096382610ecd565b9050806109b25760405162461bcd60e51b815260206004820152601760248201527f526577617264206861732072656163686564207a65726f000000000000000000604482015260640161058c565b600454604080516020808201939093523360601b6bffffffffffffffffffffffff1916818301526054808201889052825180830390910181526074909101909152805191012060055480821115610a575760405162461bcd60e51b815260206004820152602360248201527f446967657374206973206c6172676572207468616e206d696e696e672074617260448201526219d95d60ea1b606482015260840161058c565b6003546000610a71610a69858561140b565b878442610f36565b90506000610a7f8287611518565b90506000610a8c82610f57565b9050610a988385610f9a565b610aa485898542610fab565b6005556000610ab28261104a565b600481905542600281905590915033907fcf6fbb9dcea7d07263ab4f5c3a92f53af33dffc421d9d121e1c74b307e68189d908590610aef90611062565b604080519283526020830191909152810184905260600160405180910390a25060019a9950505050505050505050565b60006001600160a01b03831615801590610b4257506001600160a01b0383163014155b610b5e5760405162461bcd60e51b815260040161058c9061136d565b33600090815260076020526040902054610b79908390611537565b33600090815260076020526040808220929092556001600160a01b03851681522054610ba69083906113f3565b6001600160a01b0384166000818152600760205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061063e9086815260200190565b600080610c247f000000000000000000000000000000000000000000000000000000000000000084611537565b9050630168e6a0811015610c3b5750600092915050565b6305a39a80610c4e630168e6a083611537565b610c58919061140b565b610c639060016113f3565b9392505050565b600080546001600160a01b03163314610c8257600080fd5b60005460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490529084169063a9059cbb90604401602060405180830381600087803b158015610cd057600080fd5b505af1158015610ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c639190611273565b6000546001600160a01b03163314610d1f57600080fd5b6001600160a01b038116610d455760405162461bcd60e51b815260040161058c9061136d565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526008602090815260408083206001600160a01b03871684529091528120548314610da95760405162461bcd60e51b815260040161058c90611396565b6105a384836105ab565b600060035461025861088c9190611518565b60006001600160a01b03841615801590610de857506001600160a01b0384163014155b610e045760405162461bcd60e51b815260040161058c9061136d565b3360008181526008602090815260408083206001600160a01b03891680855290835292819020879055518681529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3604051638f4ffcb160e01b81526001600160a01b03851690638f4ffcb190610e9190339087903090889060040161131d565b600060405180830381600087803b158015610eab57600080fd5b505af1158015610ebf573d6000803e3d6000fd5b506001979650505050505050565b6000610ed882610bf7565b610ee3906002611470565b61064a9068091b77e5e5d9a0000061140b565b60008281610258610f078786611537565b610f11919061140b565b905081811115610f1f578091505b6048821115610f2d57604891505b50949350505050565b600080610f44858585610ef6565b9050808610156105a057859150506105a3565b33600090815260076020526040812080548391908390610f789084906113f3565b9091555050600654600090610f8e9084906113f3565b60068190559392505050565b808214610fa75760038290555b5050565b600080610fb88584611537565b9050610fc661025885611518565b610fd190603d611518565b610fdc826058611518565b1015611000576064610fef876063611518565b610ff9919061140b565b955061101a565b606361100d876064611518565b611017919061140b565b95505b6201000086101561102c576201000095505b600160ea1b86111561104057600160ea1b95505b5093949350505050565b60006001826110598243611537565b40181892915050565b60006102586110917f000000000000000000000000000000000000000000000000000000000000000084611537565b61064a919061140b565b80356001600160a01b03811681146110b257600080fd5b919050565b6000602082840312156110c957600080fd5b610c638261109b565b600080604083850312156110e557600080fd5b6110ee8361109b565b91506110fc6020840161109b565b90509250929050565b60008060006060848603121561111a57600080fd5b6111238461109b565b92506111316020850161109b565b9150604084013590509250925092565b6000806040838503121561115457600080fd5b61115d8361109b565b946020939093013593505050565b60008060006060848603121561118057600080fd5b6111898461109b565b95602085013595506040909401359392505050565b600080600080608085870312156111b457600080fd5b6111bd8561109b565b93506020850135925060408501359150606085013567ffffffffffffffff808211156111e857600080fd5b818701915087601f8301126111fc57600080fd5b81358181111561120e5761120e611564565b604051601f8201601f19908116603f0116810190838211818310171561123657611236611564565b816040528281528a602084870101111561124f57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60006020828403121561128557600080fd5b81518015158114610c6357600080fd5b6000602082840312156112a757600080fd5b5035919050565b600080604083850312156112c157600080fd5b50508035926020909101359150565b6000815180845260005b818110156112f6576020818501810151868301820152016112da565b81811115611308576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0385811682526020820185905283166040820152608060608201819052600090611350908301846112d0565b9695505050505050565b602081526000610c6360208301846112d0565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b60208082526038908201527f43757272656e74207370656e64657220616c6c6f77616e636520646f6573206e60408201527f6f74206d61746368207370656369666965642076616c75650000000000000000606082015260800190565b600082198211156114065761140661154e565b500190565b60008261142857634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561146857816000190482111561144e5761144e61154e565b8085161561145b57918102915b93841c9390800290611432565b509250929050565b6000610c6383836000826114865750600161064a565b816114935750600061064a565b81600181146114a957600281146114b3576114cf565b600191505061064a565b60ff8411156114c4576114c461154e565b50506001821b61064a565b5060208310610133831016604e8410600b84101617156114f2575081810a61064a565b6114fc838361142d565b80600019048211156115105761151061154e565b029392505050565b60008160001904831182151516156115325761153261154e565b500290565b6000828210156115495761154961154e565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212205476e7e04aa724315c45e467f3ffc84b5d3ad82e2543f033e539b4d173b2226d64736f6c63430008050033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102485760003560e01c806379ba50971161013b578063cea3e530116100b8578063ef08fc6e1161007c578063ef08fc6e14610507578063f2fde38b14610512578063f650366214610525578063f77e180e14610538578063f79875461461054257600080fd5b8063cea3e53014610479578063d390a1e4146104a0578063d4ee1d90146104a8578063dc39d06d146104bb578063dd62ed3e146104ce57600080fd5b80639fb68299116100ff5780639fb6829914610425578063a0712d6814610438578063a9059cbb1461044b578063aa3308bd1461045e578063c2d98c6e1461047157600080fd5b806379ba5097146103a95780638da5cb5b146103b35780638f759183146103de578063902d55a5146103f157806395d89b411461040357600080fd5b8063313ce567116101c95780634ef376281161018d5780634ef376281461035b57806357dd62fb146103635780635dbdda691461036e5780636de9f32b1461037757806370a082311461038057600080fd5b8063313ce5671461032b57806332e997081461033257806336bcf7d61461033a578063490203a71461034a5780634a1da80e1461035257600080fd5b806317da485f1161021057806317da485f146102db5780631801fbe5146102e357806318160ddd146102f657806323b872dd146102fe5780632e0f26251461031157600080fd5b8063031052f31461024d578063068a24951461026b57806306fdde031461028e578063095ea7b3146102bf5780630d97a2fb146102d2575b600080fd5b610258600160ea1b81565b6040519081526020015b60405180910390f35b61027e61027936600461119e565b61054a565b6040519015158152602001610262565b60408051808201909152600c81526b29b83934b733902a37b5b2b760a11b60208201525b604051610262919061135a565b61027e6102cd366004611141565b6105ab565b61025860035481565b610258610650565b61027e6102f13660046112ae565b61066a565b600654610258565b61027e61030c366004611105565b61073f565b610319601281565b60405160ff9091168152602001610262565b6012610319565b600554610258565b61025868091b77e5e5d9a0000081565b61025861087f565b61025860025481565b600454610258565b6102586305a39a8081565b61025861025881565b61025860065481565b61025861038e3660046110b7565b6001600160a01b031660009081526007602052604090205490565b6103b1610891565b005b6000546103c6906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b6102586103ec366004611295565b61090c565b6102586a1b63e87c1f629e3f80000081565b604080518082019091526006815265535052494e4760d01b60208201526102b2565b6102586104333660046112ae565b61091d565b61027e610446366004611295565b610953565b61027e610459366004611141565b610b1f565b61025861046c366004611295565b610bf7565b610258600181565b6102587f0000000000000000000000000000000000000000000000000000000061349baa81565b610258604881565b6001546103c6906001600160a01b031681565b61027e6104c9366004611141565b610c6a565b6102586104dc3660046110d2565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b610258630168e6a081565b6103b16105203660046110b7565b610d08565b61027e61053336600461116b565b610d67565b6102586201000081565b610258610db3565b3360009081526008602090815260408083206001600160a01b038816845290915281205484146105955760405162461bcd60e51b815260040161058c90611396565b60405180910390fd5b6105a0858484610dc5565b90505b949350505050565b60006001600160a01b038316158015906105ce57506001600160a01b0383163014155b6105ea5760405162461bcd60e51b815260040161058c9061136d565b3360008181526008602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a35060015b92915050565b60055460009060001990610664908261140b565b91505090565b6004546040805160208101929092526bffffffffffffffffffffffff193360601b16908201526054810183905260009081906074016040516020818303038152906040528051906020012090508281146107365760405162461bcd60e51b815260206004820152604160248201527f4368616c6c656e67652064696765737420646f6573206e6f74206d617463682060448201527f657870656374656420646967657374206f6e20746f6b656e20636f6e747261636064820152601d60fa1b608482015260a40161058c565b6105a384610953565b60006001600160a01b0383161580159061076257506001600160a01b0383163014155b61077e5760405162461bcd60e51b815260040161058c9061136d565b6001600160a01b0384166000908152600760205260409020546107a2908390611537565b6001600160a01b03851660009081526007602090815260408083209390935560088152828220338352905220546107da908390611537565b6001600160a01b0380861660009081526008602090815260408083203384528252808320949094559186168152600790915220546108199083906113f3565b6001600160a01b0380851660008181526007602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061086d9086815260200190565b60405180910390a35060019392505050565b600061088c600254610ecd565b905090565b6001546001600160a01b031633146108a857600080fd5b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b600061064a60025460035484610ef6565b60008061093d84600554610931919061140b565b60025460035486610f36565b90508061094984610ecd565b6105a39190611518565b6002546000908161096382610ecd565b9050806109b25760405162461bcd60e51b815260206004820152601760248201527f526577617264206861732072656163686564207a65726f000000000000000000604482015260640161058c565b600454604080516020808201939093523360601b6bffffffffffffffffffffffff1916818301526054808201889052825180830390910181526074909101909152805191012060055480821115610a575760405162461bcd60e51b815260206004820152602360248201527f446967657374206973206c6172676572207468616e206d696e696e672074617260448201526219d95d60ea1b606482015260840161058c565b6003546000610a71610a69858561140b565b878442610f36565b90506000610a7f8287611518565b90506000610a8c82610f57565b9050610a988385610f9a565b610aa485898542610fab565b6005556000610ab28261104a565b600481905542600281905590915033907fcf6fbb9dcea7d07263ab4f5c3a92f53af33dffc421d9d121e1c74b307e68189d908590610aef90611062565b604080519283526020830191909152810184905260600160405180910390a25060019a9950505050505050505050565b60006001600160a01b03831615801590610b4257506001600160a01b0383163014155b610b5e5760405162461bcd60e51b815260040161058c9061136d565b33600090815260076020526040902054610b79908390611537565b33600090815260076020526040808220929092556001600160a01b03851681522054610ba69083906113f3565b6001600160a01b0384166000818152600760205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061063e9086815260200190565b600080610c247f0000000000000000000000000000000000000000000000000000000061349baa84611537565b9050630168e6a0811015610c3b5750600092915050565b6305a39a80610c4e630168e6a083611537565b610c58919061140b565b610c639060016113f3565b9392505050565b600080546001600160a01b03163314610c8257600080fd5b60005460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490529084169063a9059cbb90604401602060405180830381600087803b158015610cd057600080fd5b505af1158015610ce4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c639190611273565b6000546001600160a01b03163314610d1f57600080fd5b6001600160a01b038116610d455760405162461bcd60e51b815260040161058c9061136d565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3360009081526008602090815260408083206001600160a01b03871684529091528120548314610da95760405162461bcd60e51b815260040161058c90611396565b6105a384836105ab565b600060035461025861088c9190611518565b60006001600160a01b03841615801590610de857506001600160a01b0384163014155b610e045760405162461bcd60e51b815260040161058c9061136d565b3360008181526008602090815260408083206001600160a01b03891680855290835292819020879055518681529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3604051638f4ffcb160e01b81526001600160a01b03851690638f4ffcb190610e9190339087903090889060040161131d565b600060405180830381600087803b158015610eab57600080fd5b505af1158015610ebf573d6000803e3d6000fd5b506001979650505050505050565b6000610ed882610bf7565b610ee3906002611470565b61064a9068091b77e5e5d9a0000061140b565b60008281610258610f078786611537565b610f11919061140b565b905081811115610f1f578091505b6048821115610f2d57604891505b50949350505050565b600080610f44858585610ef6565b9050808610156105a057859150506105a3565b33600090815260076020526040812080548391908390610f789084906113f3565b9091555050600654600090610f8e9084906113f3565b60068190559392505050565b808214610fa75760038290555b5050565b600080610fb88584611537565b9050610fc661025885611518565b610fd190603d611518565b610fdc826058611518565b1015611000576064610fef876063611518565b610ff9919061140b565b955061101a565b606361100d876064611518565b611017919061140b565b95505b6201000086101561102c576201000095505b600160ea1b86111561104057600160ea1b95505b5093949350505050565b60006001826110598243611537565b40181892915050565b60006102586110917f0000000000000000000000000000000000000000000000000000000061349baa84611537565b61064a919061140b565b80356001600160a01b03811681146110b257600080fd5b919050565b6000602082840312156110c957600080fd5b610c638261109b565b600080604083850312156110e557600080fd5b6110ee8361109b565b91506110fc6020840161109b565b90509250929050565b60008060006060848603121561111a57600080fd5b6111238461109b565b92506111316020850161109b565b9150604084013590509250925092565b6000806040838503121561115457600080fd5b61115d8361109b565b946020939093013593505050565b60008060006060848603121561118057600080fd5b6111898461109b565b95602085013595506040909401359392505050565b600080600080608085870312156111b457600080fd5b6111bd8561109b565b93506020850135925060408501359150606085013567ffffffffffffffff808211156111e857600080fd5b818701915087601f8301126111fc57600080fd5b81358181111561120e5761120e611564565b604051601f8201601f19908116603f0116810190838211818310171561123657611236611564565b816040528281528a602084870101111561124f57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60006020828403121561128557600080fd5b81518015158114610c6357600080fd5b6000602082840312156112a757600080fd5b5035919050565b600080604083850312156112c157600080fd5b50508035926020909101359150565b6000815180845260005b818110156112f6576020818501810151868301820152016112da565b81811115611308576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0385811682526020820185905283166040820152608060608201819052600090611350908301846112d0565b9695505050505050565b602081526000610c6360208301846112d0565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b60208082526038908201527f43757272656e74207370656e64657220616c6c6f77616e636520646f6573206e60408201527f6f74206d61746368207370656369666965642076616c75650000000000000000606082015260800190565b600082198211156114065761140661154e565b500190565b60008261142857634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561146857816000190482111561144e5761144e61154e565b8085161561145b57918102915b93841c9390800290611432565b509250929050565b6000610c6383836000826114865750600161064a565b816114935750600061064a565b81600181146114a957600281146114b3576114cf565b600191505061064a565b60ff8411156114c4576114c461154e565b50506001821b61064a565b5060208310610133831016604e8410600b84101617156114f2575081810a61064a565b6114fc838361142d565b80600019048211156115105761151061154e565b029392505050565b60008160001904831182151516156115325761153261154e565b500290565b6000828210156115495761154961154e565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212205476e7e04aa724315c45e467f3ffc84b5d3ad82e2543f033e539b4d173b2226d64736f6c63430008050033
Deployed Bytecode Sourcemap
617:16284:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1413:47;;-1:-1:-1;;;1413:47:4;;;;;5835:25:5;;;5823:2;5808:18;1413:47:4;;;;;;;;16083:391;;;;;;:::i;:::-;;:::i;:::-;;;5662:14:5;;5655:22;5637:41;;5625:2;5610:18;16083:391:4;5592:92:5;2112:80:4;2181:4;;;;;;;;;;;;-1:-1:-1;;;2181:4:4;;;;2112:80;;;;;;;:::i;12440:316::-;;;;;;:::i;:::-;;:::i;1560:40::-;;;;;;9052:300;;;:::i;6468:331::-;;;;;;:::i;:::-;;:::i;10829:99::-;10909:12;;10829:99;;14043:432;;;;;;:::i;:::-;;:::i;829:35::-;;862:2;829:35;;;;;8772:4:5;8760:17;;;8742:36;;8730:2;8715:18;829:35:4;8697:87:5;10734:89:4;862:2;10734:89;;9358:100;9440:12;;9358:100;;934:53;;975:12;934:53;;9464:284;;;:::i;1519:34::-;;;;;;8938:108;9024:15;;8938:108;;1274:64;;1316:22;1274:64;;1087:45;;1129:3;1087:45;;1688:27;;;;;;11152:132;;;;;;:::i;:::-;-1:-1:-1;;;;;11256:20:4;11221:15;11256:20;;;:8;:20;;;;;;;11152:132;802:218:3;;;:::i;:::-;;297:20;;;;;-1:-1:-1;;;;;297:20:3;;;;;;-1:-1:-1;;;;;4681:32:5;;;4663:51;;4651:2;4636:18;297:20:3;4618:102:5;9893:284:4;;;;;;:::i;:::-;;:::i;871:56::-;;910:17;871:56;;2198:84;2269:6;;;;;;;;;;;;-1:-1:-1;;;2269:6:4;;;;2198:84;;10183:545;;;;;;:::i;:::-;;:::i;2288:1893::-;;;;;;:::i;:::-;;:::i;11633:367::-;;;;;;:::i;:::-;;:::i;8448:339::-;;;;;;:::i;:::-;;:::i;778:44::-;;821:1;778:44;;1467:45;;;;;994:50;;1042:2;994:50;;328:23:3;;;;;-1:-1:-1;;;;;328:23:3;;;16709:189:4;;;;;;:::i;:::-;;:::i;14761:158::-;;;;;;:::i;:::-;-1:-1:-1;;;;;14883:19:4;;;14847:17;14883:19;;;:7;:19;;;;;;;;:28;;;;;;;;;;;;;14761:158;1179:76;;1227:28;1179:76;;616:176:3;;;;;;:::i;:::-;;:::i;13183:319:4:-;;;;;;:::i;:::-;;:::i;1360:46::-;;1401:5;1360:46;;8793:139;;;:::i;16083:391::-;16288:10;16247:12;16280:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;16280:28:4;;;;;;;;;;:49;;16272:134;;;;-1:-1:-1;;;16272:134:4;;;;;;;:::i;:::-;;;;;;;;;16424:43;16439:7;16448:12;16462:4;16424:14;:43::i;:::-;16417:50;;16083:391;;;;;;;:::o;12440:316::-;12515:12;-1:-1:-1;;;;;12556:21:4;;;;;;:49;;-1:-1:-1;;;;;;12581:24:4;;12600:4;12581:24;;12556:49;12548:77;;;;-1:-1:-1;;;12548:77:4;;;;;;;:::i;:::-;12644:10;12636:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;12636:28:4;;;;;;;;;;;;:37;;;12689;5835:25:5;;;12636:28:4;;12644:10;12689:37;;5808:18:5;12689:37:4;;;;;;;;-1:-1:-1;12744:4:4;12440:316;;;;;:::o;9052:300::-;9333:12;;9113:7;;-1:-1:-1;;9241:66:4;9324:21;;9241:66;9324:21;:::i;:::-;9317:28;;;9052:300;:::o;6468:331::-;6603:15;;6586:53;;;;;;4338:19:5;;;;-1:-1:-1;;6620:10:4;4395:2:5;4391:15;4387:53;4373:12;;;4366:75;4457:12;;;4450:28;;;6542:4:4;;;;4494:12:5;;6586:53:4;;;;;;;;;;;;6576:64;;;;;;6559:81;;6668:16;6658:6;:26;6650:104;;;;-1:-1:-1;;;6650:104:4;;6993:2:5;6650:104:4;;;6975:21:5;7032:2;7012:18;;;7005:30;7071:34;7051:18;;;7044:62;7142:34;7122:18;;;7115:62;-1:-1:-1;;;7193:19:5;;;7186:32;7235:19;;6650:104:4;6965:295:5;6650:104:4;6780:12;6785:6;6780:4;:12::i;14043:432::-;14132:12;-1:-1:-1;;;;;14173:16:4;;;;;;:39;;-1:-1:-1;;;;;;14193:19:4;;14207:4;14193:19;;14173:39;14165:67;;;;-1:-1:-1;;;14165:67:4;;;;;;;:::i;:::-;-1:-1:-1;;;;;14260:14:4;;;;;;:8;:14;;;;;;:23;;14277:6;;14260:23;:::i;:::-;-1:-1:-1;;;;;14243:14:4;;;;;;:8;:14;;;;;;;;:40;;;;14322:7;:13;;;;;14336:10;14322:25;;;;;;:34;;14350:6;;14322:34;:::i;:::-;-1:-1:-1;;;;;14294:13:4;;;;;;;:7;:13;;;;;;;;14308:10;14294:25;;;;;;;:62;;;;14382:12;;;;;:8;:12;;;;;:21;;14397:6;;14382:21;:::i;:::-;-1:-1:-1;;;;;14367:12:4;;;;;;;:8;:12;;;;;;;:36;;;;14419:26;;;;;;;;;;14438:6;5835:25:5;;5823:2;5808:18;;5790:76;14419:26:4;;;;;;;;-1:-1:-1;14463:4:4;14043:432;;;;;:::o;9464:284::-;9521:7;9704:37;9721:19;;9704:16;:37::i;:::-;9697:44;;9464:284;:::o;802:218:3:-;875:8;;-1:-1:-1;;;;;875:8:3;861:10;:22;853:31;;;;;;932:8;;;925:5;;904:37;;-1:-1:-1;;;;;932:8:3;;;;925:5;;;;904:37;;;964:8;;;;956:16;;-1:-1:-1;;;;;;956:16:3;;;-1:-1:-1;;;;;964:8:3;;956:16;;;;987:21;;;802:218::o;9893:284:4:-;9974:7;10000:170;10026:19;;10089:25;;10158:11;10000:25;:170::i;10183:545::-;10294:7;10313:29;10345:306;10383:14;10368:12;;:29;;;;:::i;:::-;10463:19;;10548:25;;10639:11;10345:22;:306::i;:::-;10313:338;;10700:21;10668:29;10685:11;10668:16;:29::i;:::-;:53;;;;:::i;2288:1893::-;2398:19;;2342:12;;;2465:38;2398:19;2465:16;:38::i;:::-;2436:67;-1:-1:-1;2570:23:4;2566:62;;2595:33;;-1:-1:-1;;;2595:33:4;;6641:2:5;2595:33:4;;;6623:21:5;6680:2;6660:18;;;6653:30;6719:25;6699:18;;;6692:53;6762:18;;2595:33:4;6613:173:5;2566:62:4;2785:15;;2768:52;;;;;;;4338:19:5;;;;2802:10:4;4395:2:5;4391:15;-1:-1:-1;;4387:53:5;4373:12;;;4366:75;4457:12;;;;4450:28;;;2768:52:4;;;;;;;;;;4494:12:5;;;;2768:52:4;;;2758:63;;;;;2856:12;;2936:31;;;2932:82;;;2969:45;;-1:-1:-1;;;2969:45:4;;7467:2:5;2969:45:4;;;7449:21:5;7506:2;7486:18;;;7479:30;7545:34;7525:18;;;7518:62;-1:-1:-1;;;7596:18:5;;;7589:33;7639:19;;2969:45:4;7439:225:5;2932:82:4;3063:25;;3025:35;3130:313;3153:31;3177:6;3153:13;:31;:::i;:::-;3250:20;3335:27;3427:15;3130:22;:313::i;:::-;3098:345;-1:-1:-1;3453:25:4;3481:42;3098:345;3481:18;:42;:::i;:::-;3453:70;;3534:21;3558:31;3571:17;3558:12;:31::i;:::-;3534:55;;3608:78;3635:21;3658:27;3608:26;:78::i;:::-;3712:135;3730:13;3745:20;3808:21;3831:15;3712:17;:135::i;:::-;3697:12;:150;3858:26;3887:37;3910:13;3887:22;:37::i;:::-;3934:15;:36;;;4003:15;3981:19;:37;;;3858:66;;-1:-1:-1;4039:10:4;;4034:118;;4051:17;;4070:42;;:25;:42::i;:::-;4034:118;;;8478:25:5;;;8534:2;8519:18;;8512:34;;;;8562:18;;8555:34;;;8466:2;8451:18;4034:118:4;;;;;;;-1:-1:-1;4170:4:4;;2288:1893;-1:-1:-1;;;;;;;;;;2288:1893:4:o;11633:367::-;11704:12;-1:-1:-1;;;;;11745:16:4;;;;;;:39;;-1:-1:-1;;;;;;11765:19:4;;11779:4;11765:19;;11745:39;11737:67;;;;-1:-1:-1;;;11737:67:4;;;;;;;:::i;:::-;11855:10;11846:20;;;;:8;:20;;;;;;:29;;11869:6;;11846:29;:::i;:::-;11832:10;11823:20;;;;:8;:20;;;;;;:52;;;;-1:-1:-1;;;;;11901:12:4;;;;;;:21;;11916:6;;11901:21;:::i;:::-;-1:-1:-1;;;;;11886:12:4;;;;;;:8;:12;;;;;;;:36;;;;11938:32;;11947:10;;11938:32;;;;11963:6;5835:25:5;;5823:2;5808:18;;5790:76;8448:339:4;8503:7;;8559:28;8567:20;8559:5;:28;:::i;:::-;8523:64;;1227:28;8602:25;:49;8598:182;;;-1:-1:-1;8672:1:4;;8448:339;-1:-1:-1;;8448:339:4:o;8598:182::-;1316:22;8712:49;1227:28;8712:25;:49;:::i;:::-;8711:69;;;;:::i;:::-;8707:73;;:1;:73;:::i;:::-;8700:80;8448:339;-1:-1:-1;;;8448:339:4:o;16709:189::-;16806:12;571:5:3;;-1:-1:-1;;;;;571:5:3;557:10;:19;549:28;;;;;;16876:5:4::1;::::0;16838:52:::1;::::0;-1:-1:-1;;;16838:52:4;;-1:-1:-1;;;;;16876:5:4;;::::1;16838:52;::::0;::::1;4899:51:5::0;4966:18;;;4959:34;;;16838:37:4;;::::1;::::0;::::1;::::0;4872:18:5;;16838:52:4::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;616:176:3:-:0;571:5;;-1:-1:-1;;;;;571:5:3;557:10;:19;549:28;;;;;;-1:-1:-1;;;;;702:23:3;::::1;694:51;;;;-1:-1:-1::0;;;694:51:3::1;;;;;;;:::i;:::-;760:8;:20:::0;;-1:-1:-1;;;;;;760:20:3::1;-1:-1:-1::0;;;;;760:20:3;;;::::1;::::0;;;::::1;::::0;;616:176::o;13183:319:4:-;13329:10;13288:12;13321:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;13321:28:4;;;;;;;;;;:49;;13313:134;;;;-1:-1:-1;;;13313:134:4;;;;;;;:::i;:::-;13465:30;13473:7;13482:12;13465:7;:30::i;8793:139::-;8856:7;8900:25;;1129:3;8882:43;;;;:::i;15418:434::-;15512:12;-1:-1:-1;;;;;15553:21:4;;;;;;:49;;-1:-1:-1;;;;;;15578:24:4;;15597:4;15578:24;;15553:49;15545:77;;;;-1:-1:-1;;;15545:77:4;;;;;;;:::i;:::-;15641:10;15633:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;15633:28:4;;;;;;;;;;;;:37;;;15686;5835:25:5;;;15633:28:4;;15641:10;15686:37;;5808:18:5;15686:37:4;;;;;;;15734:88;;-1:-1:-1;;;15734:88:4;;-1:-1:-1;;;;;15734:47:4;;;;;:88;;15782:10;;15794:6;;15810:4;;15817;;15734:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15840:4:4;;15418:434;-1:-1:-1;;;;;;;15418:434:4:o;9754:133::-;9818:7;9864:16;9874:5;9864:9;:16::i;:::-;9861:19;;:1;:19;:::i;:::-;9844:36;;975:12;9844:36;:::i;4187:666::-;4413:7;4459:27;4413:7;1129:3;4532:34;4546:20;4532:11;:34;:::i;:::-;4531:54;;;;:::i;:::-;4496:89;;4635:15;4608:24;:42;4604:102;;;4682:24;4664:42;;4604:102;1042:2;4721:15;:39;4717:96;;;1042:2;4774:39;;4717:96;-1:-1:-1;4831:15:4;4187:666;-1:-1:-1;;;;4187:666:4:o;4859:604::-;5097:7;5117:23;5143:203;5169:20;5248:27;5334:11;5143:25;:203::i;:::-;5117:229;;5375:15;5360:12;:30;5356:67;;;5411:12;5404:19;;;;;5469:251;5559:10;5530:7;5550:20;;;:8;:20;;;;;:35;;5574:11;;5550:20;5530:7;;5550:35;;5574:11;;5550:35;:::i;:::-;;;;-1:-1:-1;;5619:12:4;;5595:21;;5619:26;;5634:11;;5619:26;:::i;:::-;5655:12;:28;;;5595:50;5469:251;-1:-1:-1;;;5469:251:4:o;5726:694::-;6321:27;6294:23;:54;6290:123;;6362:25;:51;;;6290:123;5726:694;;:::o;7508:933::-;7752:7;;7801:34;7815:20;7801:11;:34;:::i;:::-;7771:64;-1:-1:-1;8024:33:4;1129:3;8024:15;:33;:::i;:::-;:38;;8060:2;8024:38;:::i;:::-;7997:24;:19;8019:2;7997:24;:::i;:::-;:65;7993:209;;;8115:3;8093:18;:13;8109:2;8093:18;:::i;:::-;8092:26;;;;:::i;:::-;8076:42;;7993:209;;;8200:2;8177:19;:13;8193:3;8177:19;:::i;:::-;8176:26;;;;:::i;:::-;8160:42;;7993:209;1401:5;8231:13;:30;8227:78;;;1401:5;8275:30;;8227:78;-1:-1:-1;;;8328:13:4;:30;8324:79;;;-1:-1:-1;;;8373:30:4;;8324:79;-1:-1:-1;8421:13:4;;7508:933;-1:-1:-1;;;;7508:933:4:o;6805:524::-;6883:7;821:1;7289:13;7268:16;821:1;7268:12;:16;:::i;:::-;7258:27;7250:52;:71;;6805:524;-1:-1:-1;;6805:524:4:o;7336:166::-;7415:7;1129:3;7442:34;7456:20;7442:11;:34;:::i;:::-;7441:54;;;;:::i;14:173:5:-;82:20;;-1:-1:-1;;;;;131:31:5;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:2;;;320:1;317;310:12;272:2;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:2;;;528:1;525;518:12;480:2;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;470:173;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:2;;;810:1;807;800:12;762:2;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;752:224;;;;;:::o;981:254::-;1049:6;1057;1110:2;1098:9;1089:7;1085:23;1081:32;1078:2;;;1126:1;1123;1116:12;1078:2;1149:29;1168:9;1149:29;:::i;:::-;1139:39;1225:2;1210:18;;;;1197:32;;-1:-1:-1;;;1068:167:5:o;1240:322::-;1317:6;1325;1333;1386:2;1374:9;1365:7;1361:23;1357:32;1354:2;;;1402:1;1399;1392:12;1354:2;1425:29;1444:9;1425:29;:::i;:::-;1415:39;1501:2;1486:18;;1473:32;;-1:-1:-1;1552:2:5;1537:18;;;1524:32;;1344:218;-1:-1:-1;;;1344:218:5:o;1567:1132::-;1662:6;1670;1678;1686;1739:3;1727:9;1718:7;1714:23;1710:33;1707:2;;;1756:1;1753;1746:12;1707:2;1779:29;1798:9;1779:29;:::i;:::-;1769:39;;1855:2;1844:9;1840:18;1827:32;1817:42;;1906:2;1895:9;1891:18;1878:32;1868:42;;1961:2;1950:9;1946:18;1933:32;1984:18;2025:2;2017:6;2014:14;2011:2;;;2041:1;2038;2031:12;2011:2;2079:6;2068:9;2064:22;2054:32;;2124:7;2117:4;2113:2;2109:13;2105:27;2095:2;;2146:1;2143;2136:12;2095:2;2182;2169:16;2204:2;2200;2197:10;2194:2;;;2210:18;;:::i;:::-;2285:2;2279:9;2253:2;2339:13;;-1:-1:-1;;2335:22:5;;;2359:2;2331:31;2327:40;2315:53;;;2383:18;;;2403:22;;;2380:46;2377:2;;;2429:18;;:::i;:::-;2469:10;2465:2;2458:22;2504:2;2496:6;2489:18;2544:7;2539:2;2534;2530;2526:11;2522:20;2519:33;2516:2;;;2565:1;2562;2555:12;2516:2;2621;2616;2612;2608:11;2603:2;2595:6;2591:15;2578:46;2666:1;2661:2;2656;2648:6;2644:15;2640:24;2633:35;2687:6;2677:16;;;;;;;1697:1002;;;;;;;:::o;2704:277::-;2771:6;2824:2;2812:9;2803:7;2799:23;2795:32;2792:2;;;2840:1;2837;2830:12;2792:2;2872:9;2866:16;2925:5;2918:13;2911:21;2904:5;2901:32;2891:2;;2947:1;2944;2937:12;2986:180;3045:6;3098:2;3086:9;3077:7;3073:23;3069:32;3066:2;;;3114:1;3111;3104:12;3066:2;-1:-1:-1;3137:23:5;;3056:110;-1:-1:-1;3056:110:5:o;3171:248::-;3239:6;3247;3300:2;3288:9;3279:7;3275:23;3271:32;3268:2;;;3316:1;3313;3306:12;3268:2;-1:-1:-1;;3339:23:5;;;3409:2;3394:18;;;3381:32;;-1:-1:-1;3258:161:5:o;3677:471::-;3718:3;3756:5;3750:12;3783:6;3778:3;3771:19;3808:1;3818:162;3832:6;3829:1;3826:13;3818:162;;;3894:4;3950:13;;;3946:22;;3940:29;3922:11;;;3918:20;;3911:59;3847:12;3818:162;;;3998:6;3995:1;3992:13;3989:2;;;4064:1;4057:4;4048:6;4043:3;4039:16;4035:27;4028:38;3989:2;-1:-1:-1;4130:2:5;4109:15;-1:-1:-1;;4105:29:5;4096:39;;;;4137:4;4092:50;;3726:422;-1:-1:-1;;3726:422:5:o;5004:488::-;-1:-1:-1;;;;;5273:15:5;;;5255:34;;5320:2;5305:18;;5298:34;;;5368:15;;5363:2;5348:18;;5341:43;5420:3;5415:2;5400:18;;5393:31;;;5198:4;;5441:45;;5466:19;;5458:6;5441:45;:::i;:::-;5433:53;5207:285;-1:-1:-1;;;;;;5207:285:5:o;5871:219::-;6020:2;6009:9;6002:21;5983:4;6040:44;6080:2;6069:9;6065:18;6057:6;6040:44;:::i;6095:339::-;6297:2;6279:21;;;6336:2;6316:18;;;6309:30;-1:-1:-1;;;6370:2:5;6355:18;;6348:45;6425:2;6410:18;;6269:165::o;7669:420::-;7871:2;7853:21;;;7910:2;7890:18;;;7883:30;7949:34;7944:2;7929:18;;7922:62;8020:26;8015:2;8000:18;;7993:54;8079:3;8064:19;;7843:246::o;8789:128::-;8829:3;8860:1;8856:6;8853:1;8850:13;8847:2;;;8866:18;;:::i;:::-;-1:-1:-1;8902:9:5;;8837:80::o;8922:217::-;8962:1;8988;8978:2;;9032:10;9027:3;9023:20;9020:1;9013:31;9067:4;9064:1;9057:15;9095:4;9092:1;9085:15;8978:2;-1:-1:-1;9124:9:5;;8968:171::o;9144:422::-;9233:1;9276:5;9233:1;9290:270;9311:7;9301:8;9298:21;9290:270;;;9370:4;9366:1;9362:6;9358:17;9352:4;9349:27;9346:2;;;9379:18;;:::i;:::-;9429:7;9419:8;9415:22;9412:2;;;9449:16;;;;9412:2;9528:22;;;;9488:15;;;;9290:270;;;9294:3;9208:358;;;;;:::o;9571:131::-;9631:5;9660:36;9687:8;9681:4;9756:5;9786:8;9776:2;;-1:-1:-1;9827:1:5;9841:5;;9776:2;9875:4;9865:2;;-1:-1:-1;9912:1:5;9926:5;;9865:2;9957:4;9975:1;9970:59;;;;10043:1;10038:130;;;;9950:218;;9970:59;10000:1;9991:10;;10014:5;;;10038:130;10075:3;10065:8;10062:17;10059:2;;;10082:18;;:::i;:::-;-1:-1:-1;;10138:1:5;10124:16;;10153:5;;9950:218;;10252:2;10242:8;10239:16;10233:3;10227:4;10224:13;10220:36;10214:2;10204:8;10201:16;10196:2;10190:4;10187:12;10183:35;10180:77;10177:2;;;-1:-1:-1;10289:19:5;;;10321:5;;10177:2;10368:34;10393:8;10387:4;10368:34;:::i;:::-;10438:6;10434:1;10430:6;10426:19;10417:7;10414:32;10411:2;;;10449:18;;:::i;:::-;10487:20;;9766:747;-1:-1:-1;;;9766:747:5:o;10518:168::-;10558:7;10624:1;10620;10616:6;10612:14;10609:1;10606:21;10601:1;10594:9;10587:17;10583:45;10580:2;;;10631:18;;:::i;:::-;-1:-1:-1;10671:9:5;;10570:116::o;10691:125::-;10731:4;10759:1;10756;10753:8;10750:2;;;10764:18;;:::i;:::-;-1:-1:-1;10801:9:5;;10740:76::o;10821:127::-;10882:10;10877:3;10873:20;10870:1;10863:31;10913:4;10910:1;10903:15;10937:4;10934:1;10927:15;10953:127;11014:10;11009:3;11005:20;11002:1;10995:31;11045:4;11042:1;11035:15;11069:4;11066:1;11059:15
Swarm Source
ipfs://5476e7e04aa724315c45e467f3ffc84b5d3ad82e2543f033e539b4d173b2226d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.