Contract
0x1d60109178c48e4a937d8ab71699d8ebb6f7c5de
1
[ Download CSV Export ]
Contract Name:
MagERC20Token
Compiler Version
v0.7.5+commit.eb77ed08
Contract Source Code (Solidity)
/** *Submitted for verification at snowtrace.io on 2022-01-02 */ // File: contracts/lib/SafeMath.sol // SPDX-License-Identifier: AGPL-3.0-or-later pragma solidity 0.7.5; //u32 library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function add32(uint32 a, uint32 b) internal pure returns (uint32) { uint32 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function sub32(uint32 a, uint32 b) internal pure returns (uint32) { return sub32(a, b, "SafeMath: subtraction overflow"); } function sub32( uint32 a, uint32 b, string memory errorMessage ) internal pure returns (uint32) { require(b <= a, errorMessage); uint32 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function mul32(uint32 a, uint32 b) internal pure returns (uint32) { if (a == 0) { return 0; } uint32 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } function sqrrt(uint256 a) internal pure returns (uint256 c) { if (a > 3) { c = a; uint256 b = add(div(a, 2), 1); while (b < c) { c = b; b = div(add(div(a, b), b), 2); } } else if (a != 0) { c = 1; } } /* * Expects percentage to be trailed by 00, */ function percentageAmount(uint256 total_, uint8 percentage_) internal pure returns (uint256 percentAmount_) { return div(mul(total_, percentage_), 1000); } /* * Expects percentage to be trailed by 00, */ function substractPercentage(uint256 total_, uint8 percentageToSub_) internal pure returns (uint256 result_) { return sub(total_, div(mul(total_, percentageToSub_), 1000)); } function percentageOfTotal(uint256 part_, uint256 total_) internal pure returns (uint256 percent_) { return div(mul(part_, 100), total_); } /** * Taken from Hypersonic https://github.com/M2629/HyperSonic/blob/main/Math.sol * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + (((a % 2) + (b % 2)) / 2); } function quadraticPricing(uint256 payment_, uint256 multiplier_) internal pure returns (uint256) { return sqrrt(mul(multiplier_, payment_)); } function bondingCurve(uint256 supply_, uint256 multiplier_) internal pure returns (uint256) { return mul(multiplier_, supply_); } } // File: contracts/lib/Counters.sol pragma solidity 0.7.5; library Counters { using SafeMath for uint256; struct Counter { uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { counter._value += 1; } function decrement(Counter storage counter) internal { counter._value = counter._value.sub(1); } } // File: contracts/lib/ERC20.sol pragma solidity 0.7.5; interface IERC20 { function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } contract ERC20 is IERC20 { using SafeMath for uint256; // TODO comment actual hash value. bytes32 private constant ERC20TOKEN_ERC1820_INTERFACE_ID = keccak256("ERC20Token"); mapping(address => uint256) internal _balances; mapping(address => mapping(address => uint256)) internal _allowances; uint256 internal _totalSupply; string internal _name; string internal _symbol; uint8 internal _decimals; constructor( string memory name_, string memory symbol_, uint8 decimals_ ) { _name = name_; _symbol = symbol_; _decimals = decimals_; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view override returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(msg.sender, spender, amount); return true; } function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, msg.sender, _allowances[sender][msg.sender].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( msg.sender, spender, _allowances[msg.sender][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( msg.sender, spender, _allowances[msg.sender][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub( amount, "ERC20: transfer amount exceeds balance" ); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } function _mint(address account_, uint256 ammount_) internal virtual { require(account_ != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(this), account_, ammount_); _totalSupply = _totalSupply.add(ammount_); _balances[account_] = _balances[account_].add(ammount_); emit Transfer(address(this), account_, ammount_); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub( amount, "ERC20: burn amount exceeds balance" ); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _beforeTokenTransfer( address from_, address to_, uint256 amount_ ) internal virtual {} } // File: contracts/lib/ERC20Permit.sol pragma solidity 0.7.5; interface IERC2612Permit { function permit( address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function nonces(address owner) external view returns (uint256); } abstract contract ERC20Permit is ERC20, IERC2612Permit { using Counters for Counters.Counter; mapping(address => Counters.Counter) private _nonces; // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9; bytes32 public DOMAIN_SEPARATOR; constructor() { uint256 chainID; assembly { chainID := chainid() } DOMAIN_SEPARATOR = keccak256( abi.encode( keccak256( "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" ), keccak256(bytes(name())), keccak256(bytes("1")), // Version chainID, address(this) ) ); } function permit( address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual override { require(block.timestamp <= deadline, "Permit: expired deadline"); bytes32 hashStruct = keccak256( abi.encode( PERMIT_TYPEHASH, owner, spender, amount, _nonces[owner].current(), deadline ) ); bytes32 _hash = keccak256( abi.encodePacked(uint16(0x1901), DOMAIN_SEPARATOR, hashStruct) ); address signer = ecrecover(_hash, v, r, s); require( signer != address(0) && signer == owner, "ZeroSwapPermit: Invalid signature" ); _nonces[owner].increment(); _approve(owner, spender, amount); } function nonces(address owner) public view override returns (uint256) { return _nonces[owner].current(); } } // File: contracts/lib/Ownable.sol pragma solidity 0.7.5; interface IOwnable { function policy() external view returns (address); function renounceManagement() external; function pushManagement(address newOwner_) external; function pullManagement() external; } contract Ownable is IOwnable { address internal _owner; address internal _newOwner; event OwnershipPushed( address indexed previousOwner, address indexed newOwner ); event OwnershipPulled( address indexed previousOwner, address indexed newOwner ); constructor() { _owner = msg.sender; emit OwnershipPushed(address(0), _owner); } function policy() public view override returns (address) { return _owner; } modifier onlyManager() { require(_owner == msg.sender, "Ownable: caller is not the owner"); _; } function renounceManagement() public virtual override onlyManager { emit OwnershipPushed(_owner, address(0)); _owner = address(0); } function pushManagement(address newOwner_) public virtual override onlyManager { require( newOwner_ != address(0), "Ownable: new owner is the zero address" ); emit OwnershipPushed(_owner, newOwner_); _newOwner = newOwner_; } function pullManagement() public virtual override { require(msg.sender == _newOwner, "Ownable: must be new owner to pull"); emit OwnershipPulled(_owner, _newOwner); _owner = _newOwner; } } // File: contracts/MagERC20.sol pragma solidity 0.7.5; contract VaultOwned is Ownable { address internal _vault; function setVault(address vault_) external onlyManager returns (bool) { _vault = vault_; return true; } function vault() public view returns (address) { return _vault; } modifier onlyVault() { require(_vault == msg.sender, "VaultOwned: caller is not the Vault"); _; } } contract MagERC20Token is ERC20Permit, VaultOwned { using SafeMath for uint256; constructor() ERC20("Magnet", "MAG", 9) {} function mint(address account_, uint256 amount_) external onlyVault { _mint(account_, amount_); } function burn(uint256 amount) public virtual { _burn(msg.sender, amount); } function burnFrom(address account_, uint256 amount_) public virtual { _burnFrom(account_, amount_); } function _burnFrom(address account_, uint256 amount_) public virtual { uint256 decreasedAllowance_ = allowance(account_, msg.sender).sub( amount_, "ERC20: burn amount exceeds allowance" ); _approve(account_, msg.sender, decreasedAllowance_); _burn(account_, amount_); } }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPulled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPushed","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"_burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"policy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pullManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"pushManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vault_","type":"address"}],"name":"setVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405180604001604052806006815260200165135859db995d60d21b815250604051806040016040528060038152602001624d414760e81b815250600982600390805190602001906200006792919062000228565b5081516200007d90600490602085019062000228565b506005805460ff191660ff92909216919091179055504690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c16200018e565b805160209182012060408051808201825260018152603160f81b90840152805180840194909452838101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606084015260808301939093523060a0808401919091528351808403909101815260c0909201928390528151910120600755600880546001600160a01b0319163317908190556001600160a01b0316906000907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908290a3620002d4565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156200021e5780601f10620001f2576101008083540402835291602001916200021e565b820191906000526020600020905b8154815290600101906020018083116200020057829003601f168201915b5050505050905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620002605760008555620002ab565b82601f106200027b57805160ff1916838001178555620002ab565b82800160010185558215620002ab579182015b82811115620002ab5782518255916020019190600101906200028e565b50620002b9929150620002bd565b5090565b5b80821115620002b95760008155600101620002be565b61156880620002e46000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c806346f68ee9116100de57806395d89b4111610097578063a9059cbb11610071578063a9059cbb14610482578063d505accf146104ae578063dd62ed3e146104ff578063fbfa77cf1461052d57610173565b806395d89b4114610422578063a22b35ce1461042a578063a457c2d71461045657610173565b806346f68ee9146103565780635a96ac0a1461037c5780636817031b1461038457806370a08231146103aa57806379cc6790146103d05780637ecebe00146103fc57610173565b806330adf81f1161013057806330adf81f146102b3578063313ce567146102bb5780633644e515146102d957806339509351146102e157806340c10f191461030d57806342966c681461033957610173565b80630505c8c91461017857806306fdde031461019c578063089208d814610219578063095ea7b31461022357806318160ddd1461026357806323b872dd1461027d575b600080fd5b610180610535565b604080516001600160a01b039092168252519081900360200190f35b6101a4610544565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101de5781810151838201526020016101c6565b50505050905090810190601f16801561020b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102216105da565b005b61024f6004803603604081101561023957600080fd5b506001600160a01b038135169060200135610683565b604080519115158252519081900360200190f35b61026b610699565b60408051918252519081900360200190f35b61024f6004803603606081101561029357600080fd5b506001600160a01b0381358116916020810135909116906040013561069f565b61026b610708565b6102c361072c565b6040805160ff9092168252519081900360200190f35b61026b610735565b61024f600480360360408110156102f757600080fd5b506001600160a01b03813516906020013561073b565b6102216004803603604081101561032357600080fd5b506001600160a01b038135169060200135610771565b6102216004803603602081101561034f57600080fd5b50356107c8565b6102216004803603602081101561036c57600080fd5b50356001600160a01b03166107d5565b6102216108d5565b61024f6004803603602081101561039a57600080fd5b50356001600160a01b0316610981565b61026b600480360360208110156103c057600080fd5b50356001600160a01b0316610a08565b610221600480360360408110156103e657600080fd5b506001600160a01b038135169060200135610a23565b61026b6004803603602081101561041257600080fd5b50356001600160a01b0316610a2d565b6101a4610a54565b6102216004803603604081101561044057600080fd5b506001600160a01b038135169060200135610ab5565b61024f6004803603604081101561046c57600080fd5b506001600160a01b038135169060200135610b01565b61024f6004803603604081101561049857600080fd5b506001600160a01b038135169060200135610b50565b610221600480360360e08110156104c457600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610b5d565b61026b6004803603604081101561051557600080fd5b506001600160a01b0381358116916020013516610d8a565b610180610db5565b6008546001600160a01b031690565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105d05780601f106105a5576101008083540402835291602001916105d0565b820191906000526020600020905b8154815290600101906020018083116105b357829003601f168201915b5050505050905090565b6008546001600160a01b03163314610639576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6008546040516000916001600160a01b0316907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600880546001600160a01b0319169055565b6000610690338484610dc4565b50600192915050565b60025490565b60006106ac848484610eb0565b6106fe84336106f985604051806060016040528060288152602001611435602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061100b565b610dc4565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460ff1690565b60075481565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106909185906106f990866110a2565b600a546001600160a01b031633146107ba5760405162461bcd60e51b815260040180806020018281038252602381526020018061145d6023913960400191505060405180910390fd5b6107c48282611103565b5050565b6107d233826111f3565b50565b6008546001600160a01b03163314610834576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166108795760405162461bcd60e51b81526004018080602001828103825260268152602001806113846026913960400191505060405180910390fd5b6008546040516001600160a01b038084169216907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba90600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b0316331461091e5760405162461bcd60e51b81526004018080602001828103825260228152602001806113f26022913960400191505060405180910390fd5b6009546008546040516001600160a01b0392831692909116907faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d90600090a3600954600880546001600160a01b0319166001600160a01b03909216919091179055565b6008546000906001600160a01b031633146109e3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b50600a80546001600160a01b0383166001600160a01b03199091161790556001919050565b6001600160a01b031660009081526020819052604090205490565b6107c48282610ab5565b6001600160a01b0381166000908152600660205260408120610a4e906112ef565b92915050565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105d05780601f106105a5576101008083540402835291602001916105d0565b6000610ae58260405180606001604052806024815260200161148060249139610ade8633610d8a565b919061100b565b9050610af2833383610dc4565b610afc83836111f3565b505050565b600061069033846106f98560405180606001604052806025815260200161150e602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061100b565b6000610690338484610eb0565b83421115610bb2576040805162461bcd60e51b815260206004820152601860248201527f5065726d69743a206578706972656420646561646c696e650000000000000000604482015290519081900360640190fd5b6001600160a01b03871660009081526006602052604081207f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c990899089908990610bfb906112ef565b604080516020808201979097526001600160a01b0395861681830152939094166060840152608083019190915260a082015260c08082018990528251808303909101815260e08201835280519084012060075461190160f01b610100840152610102830152610122808301829052835180840390910181526101428301808552815191860191909120600091829052610162840180865281905260ff8a166101828501526101a284018990526101c28401889052935191955092936001926101e280820193601f1981019281900390910190855afa158015610ce1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590610d175750896001600160a01b0316816001600160a01b0316145b610d525760405162461bcd60e51b81526004018080602001828103825260218152602001806114146021913960400191505060405180910390fd5b6001600160a01b038a166000908152600660205260409020610d73906112f3565b610d7e8a8a8a610dc4565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600a546001600160a01b031690565b6001600160a01b038316610e095760405162461bcd60e51b81526004018080602001828103825260248152602001806114ea6024913960400191505060405180910390fd5b6001600160a01b038216610e4e5760405162461bcd60e51b81526004018080602001828103825260228152602001806113aa6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610ef55760405162461bcd60e51b81526004018080602001828103825260258152602001806114c56025913960400191505060405180910390fd5b6001600160a01b038216610f3a5760405162461bcd60e51b815260040180806020018281038252602381526020018061133f6023913960400191505060405180910390fd5b610f45838383610afc565b610f82816040518060600160405280602681526020016113cc602691396001600160a01b038616600090815260208190526040902054919061100b565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610fb190826110a2565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000818484111561109a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561105f578181015183820152602001611047565b50505050905090810190601f16801561108c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156110fc576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b03821661115e576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611169308383610afc565b60025461117690826110a2565b6002556001600160a01b03821660009081526020819052604090205461119c90826110a2565b6001600160a01b038316600081815260208181526040918290209390935580518481529051919230927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166112385760405162461bcd60e51b81526004018080602001828103825260218152602001806114a46021913960400191505060405180910390fd5b61124482600083610afc565b61128181604051806060016040528060228152602001611362602291396001600160a01b038516600090815260208190526040902054919061100b565b6001600160a01b0383166000908152602081905260409020556002546112a790826112fc565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b5490565b80546001019055565b60006110fc83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061100b56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c5a65726f537761705065726d69743a20496e76616c6964207369676e617475726545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655661756c744f776e65643a2063616c6c6572206973206e6f7420746865205661756c7445524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202f9a7a0c334f2b2154028abb67d2bb00bad6082e8398007557331cb8d51c5aea64736f6c63430007050033
Deployed ByteCode Sourcemap
15521:822:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14078:89;;;:::i;:::-;;;;-1:-1:-1;;;;;14078:89:0;;;;;;;;;;;;;;6522:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14302:155;;;:::i;:::-;;7532:208;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;7532:208:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;6808:100;;;:::i;:::-;;;;;;;;;;;;;;;;7748:450;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;7748:450:0;;;;;;;;;;;;;;;;;:::i;11568:117::-;;;:::i;6708:92::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11694:31;;;:::i;8206:296::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8206:296:0;;;;;;;;:::i;15663:111::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15663:111:0;;;;;;;;:::i;15782:89::-;;;;;;;;;;;;;;;;-1:-1:-1;15782:89:0;;:::i;14465:332::-;;;;;;;;;;;;;;;;-1:-1:-1;14465:332:0;-1:-1:-1;;;;;14465:332:0;;:::i;14805:218::-;;;:::i;15171:128::-;;;;;;;;;;;;;;;;-1:-1:-1;15171:128:0;-1:-1:-1;;;;;15171:128:0;;:::i;6916:177::-;;;;;;;;;;;;;;;;-1:-1:-1;6916:177:0;-1:-1:-1;;;;;6916:177:0;;:::i;15879:115::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15879:115:0;;;;;;;;:::i;13220:120::-;;;;;;;;;;;;;;;;-1:-1:-1;13220:120:0;-1:-1:-1;;;;;13220:120:0;;:::i;6613:87::-;;;:::i;16002:338::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16002:338:0;;;;;;;;:::i;8510:396::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8510:396:0;;;;;;;;:::i;7101:214::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;7101:214:0;;;;;;;;:::i;12253:959::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12253:959:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7323:201::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;7323:201:0;;;;;;;;;;:::i;15307:79::-;;;:::i;14078:89::-;14153:6;;-1:-1:-1;;;;;14153:6:0;14078:89;:::o;6522:83::-;6592:5;6585:12;;;;;;;;-1:-1:-1;;6585:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6559:13;;6585:12;;6592:5;;6585:12;;6592:5;6585:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6522:83;:::o;14302:155::-;14217:6;;-1:-1:-1;;;;;14217:6:0;14227:10;14217:20;14209:65;;;;;-1:-1:-1;;;14209:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14400:6:::1;::::0;14384:35:::1;::::0;14416:1:::1;::::0;-1:-1:-1;;;;;14400:6:0::1;::::0;14384:35:::1;::::0;14416:1;;14384:35:::1;14430:6;:19:::0;;-1:-1:-1;;;;;;14430:19:0::1;::::0;;14302:155::o;7532:208::-;7651:4;7673:37;7682:10;7694:7;7703:6;7673:8;:37::i;:::-;-1:-1:-1;7728:4:0;7532:208;;;;:::o;6808:100::-;6888:12;;6808:100;:::o;7748:450::-;7888:4;7905:36;7915:6;7923:9;7934:6;7905:9;:36::i;:::-;7952:216;7975:6;7996:10;8021:136;8075:6;8021:136;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8021:19:0;;;;;;:11;:19;;;;;;;;8041:10;8021:31;;;;;;;;;:136;:35;:136::i;:::-;7952:8;:216::i;:::-;-1:-1:-1;8186:4:0;7748:450;;;;;:::o;11568:117::-;11619:66;11568:117;:::o;6708:92::-;6783:9;;;;6708:92;:::o;11694:31::-;;;;:::o;8206:296::-;8366:10;8321:4;8413:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;8413:32:0;;;;;;;;;;8321:4;;8343:129;;8391:7;;8413:48;;8450:10;8413:36;:48::i;15663:111::-;15434:6;;-1:-1:-1;;;;;15434:6:0;15444:10;15434:20;15426:68;;;;-1:-1:-1;;;15426:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15742:24:::1;15748:8;15758:7;15742:5;:24::i;:::-;15663:111:::0;;:::o;15782:89::-;15838:25;15844:10;15856:6;15838:5;:25::i;:::-;15782:89;:::o;14465:332::-;14217:6;;-1:-1:-1;;;;;14217:6:0;14227:10;14217:20;14209:65;;;;;-1:-1:-1;;;14209:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14618:23:0;::::1;14596:111;;;;-1:-1:-1::0;;;14596:111:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14739:6;::::0;14723:34:::1;::::0;-1:-1:-1;;;;;14723:34:0;;::::1;::::0;14739:6:::1;::::0;14723:34:::1;::::0;14739:6:::1;::::0;14723:34:::1;14768:9;:21:::0;;-1:-1:-1;;;;;;14768:21:0::1;-1:-1:-1::0;;;;;14768:21:0;;;::::1;::::0;;;::::1;::::0;;14465:332::o;14805:218::-;14888:9;;-1:-1:-1;;;;;14888:9:0;14874:10;:23;14866:70;;;;-1:-1:-1;;;14866:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14976:9;;14968:6;;14952:34;;-1:-1:-1;;;;;14976:9:0;;;;14968:6;;;;14952:34;;14976:9;;14952:34;15006:9;;14997:6;:18;;-1:-1:-1;;;;;;14997:18:0;-1:-1:-1;;;;;15006:9:0;;;14997:18;;;;;;14805:218::o;15171:128::-;14217:6;;15235:4;;-1:-1:-1;;;;;14217:6:0;14227:10;14217:20;14209:65;;;;;-1:-1:-1;;;14209:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15252:6:0::1;:15:::0;;-1:-1:-1;;;;;15252:15:0;::::1;-1:-1:-1::0;;;;;;15252:15:0;;::::1;;::::0;;;15171:128;;;:::o;6916:177::-;-1:-1:-1;;;;;7067:18:0;7035:7;7067:18;;;;;;;;;;;;6916:177::o;15879:115::-;15958:28;15968:8;15978:7;15958:9;:28::i;13220:120::-;-1:-1:-1;;;;;13308:14:0;;13281:7;13308:14;;;:7;:14;;;;;:24;;:22;:24::i;:::-;13301:31;13220:120;-1:-1:-1;;13220:120:0:o;6613:87::-;6685:7;6678:14;;;;;;;;-1:-1:-1;;6678:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6652:13;;6678:14;;6685:7;;6678:14;;6685:7;6678:14;;;;;;;;;;;;;;;;;;;;;;;;16002:338;16082:27;16112:121;16162:7;16112:121;;;;;;;;;;;;;;;;;:31;16122:8;16132:10;16112:9;:31::i;:::-;:35;:121;:35;:121::i;:::-;16082:151;;16246:51;16255:8;16265:10;16277:19;16246:8;:51::i;:::-;16308:24;16314:8;16324:7;16308:5;:24::i;:::-;16002:338;;;:::o;8510:396::-;8630:4;8652:224;8675:10;8700:7;8722:143;8777:15;8722:143;;;;;;;;;;;;;;;;;8734:10;8722:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;8722:32:0;;;;;;;;;;;:143;:36;:143::i;7101:214::-;7223:4;7245:40;7255:10;7267:9;7278:6;7245:9;:40::i;12253:959::-;12498:8;12479:15;:27;;12471:64;;;;;-1:-1:-1;;;12471:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12731:14:0;;12548:18;12731:14;;;:7;:14;;;;;11619:66;;12656:5;;12680:7;;12706:6;;12731:24;;:22;:24::i;:::-;12593:204;;;;;;;;;;;-1:-1:-1;;;;;12593:204:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12569:239;;;;;;12894:16;;-1:-1:-1;;;12861:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12837:97;;;;;;;;;-1:-1:-1;12964:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12569:239;;-1:-1:-1;12837:97:0;;12964:25;;;;;;;-1:-1:-1;;12964:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12964:25:0;;-1:-1:-1;;12964:25:0;;;-1:-1:-1;;;;;;;13022:20:0;;;;;;:39;;;13056:5;-1:-1:-1;;;;;13046:15:0;:6;-1:-1:-1;;;;;13046:15:0;;13022:39;13000:122;;;;-1:-1:-1;;;13000:122:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13135:14:0;;;;;;:7;:14;;;;;:26;;:24;:26::i;:::-;13172:32;13181:5;13188:7;13197:6;13172:8;:32::i;:::-;12253:959;;;;;;;;;;:::o;7323:201::-;-1:-1:-1;;;;;7489:18:0;;;7457:7;7489:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;7323:201::o;15307:79::-;15372:6;;-1:-1:-1;;;;;15372:6:0;15307:79;:::o;10399:380::-;-1:-1:-1;;;;;10535:19:0;;10527:68;;;;-1:-1:-1;;;10527:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10614:21:0;;10606:68;;;;-1:-1:-1;;;10606:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10687:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10739:32;;;;;;;;;;;;;;;;;10399:380;;;:::o;8914:610::-;-1:-1:-1;;;;;9054:20:0;;9046:70;;;;-1:-1:-1;;;9046:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9135:23:0;;9127:71;;;;-1:-1:-1;;;9127:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9211:47;9232:6;9240:9;9251:6;9211:20;:47::i;:::-;9291:108;9327:6;9291:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9291:17:0;;:9;:17;;;;;;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;9271:17:0;;;:9;:17;;;;;;;;;;;:128;;;;9433:20;;;;;;;:32;;9458:6;9433:24;:32::i;:::-;-1:-1:-1;;;;;9410:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;9481:35;;;;;;;9410:20;;9481:35;;;;;;;;;;;;;8914:610;;;:::o;663:226::-;783:7;819:12;811:6;;;;803:29;;;;-1:-1:-1;;;803:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;855:5:0;;;663:226::o;143:181::-;201:7;233:5;;;257:6;;;;249:46;;;;;-1:-1:-1;;;249:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;315:1;143:181;-1:-1:-1;;;143:181:0:o;9532:396::-;-1:-1:-1;;;;;9619:22:0;;9611:66;;;;;-1:-1:-1;;;9611:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9688:55;9717:4;9724:8;9734;9688:20;:55::i;:::-;9769:12;;:26;;9786:8;9769:16;:26::i;:::-;9754:12;:41;-1:-1:-1;;;;;9828:19:0;;:9;:19;;;;;;;;;;;:33;;9852:8;9828:23;:33::i;:::-;-1:-1:-1;;;;;9806:19:0;;:9;:19;;;;;;;;;;;;:55;;;;9877:43;;;;;;;9806:19;;9894:4;;9877:43;;;;;;;;;;9532:396;;:::o;9936:455::-;-1:-1:-1;;;;;10020:21:0;;10012:67;;;;-1:-1:-1;;;10012:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10092:49;10113:7;10130:1;10134:6;10092:20;:49::i;:::-;10175:105;10212:6;10175:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10175:18:0;;:9;:18;;;;;;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;10154:18:0;;:9;:18;;;;;;;;;;:126;10306:12;;:24;;10323:6;10306:16;:24::i;:::-;10291:12;:39;10346:37;;;;;;;;10372:1;;-1:-1:-1;;;;;10346:37:0;;;;;;;;;;;;9936:455;;:::o;4579:114::-;4671:14;;4579:114::o;4701:91::-;4765:19;;4783:1;4765:19;;;4701:91::o;519:136::-;577:7;604:43;608:1;611;604:43;;;;;;;;;;;;;;;;;:3;:43::i
Swarm Source
ipfs://2f9a7a0c334f2b2154028abb67d2bb00bad6082e8398007557331cb8d51c5aea
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.