Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
Latest 25 from a total of 21,221 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unlock | 21263440 | 35 hrs ago | IN | 0 ETH | 0.00096267 | ||||
Lock | 21254898 | 2 days ago | IN | 0 ETH | 0.00054274 | ||||
Unlock | 21254060 | 2 days ago | IN | 0 ETH | 0.00126126 | ||||
Lock | 21248149 | 3 days ago | IN | 0 ETH | 0.00059198 | ||||
Lock | 21242024 | 4 days ago | IN | 0 ETH | 0.0005009 | ||||
Unlock | 21239098 | 4 days ago | IN | 0 ETH | 0.001695 | ||||
Unlock | 21224290 | 6 days ago | IN | 0 ETH | 0.00235772 | ||||
Unlock | 21214868 | 8 days ago | IN | 0 ETH | 0.00120952 | ||||
Lock | 21212856 | 8 days ago | IN | 0 ETH | 0.0005489 | ||||
Unlock | 21201183 | 10 days ago | IN | 0 ETH | 0.00189668 | ||||
Unlock | 21185799 | 12 days ago | IN | 0 ETH | 0.00246548 | ||||
Unlock | 21171605 | 14 days ago | IN | 0 ETH | 0.00232301 | ||||
Unlock | 21164783 | 15 days ago | IN | 0 ETH | 0.00222164 | ||||
Lock | 21157784 | 16 days ago | IN | 0 ETH | 0.00076316 | ||||
Unlock | 21128098 | 20 days ago | IN | 0 ETH | 0.00131162 | ||||
Unlock | 21117167 | 21 days ago | IN | 0 ETH | 0.00185986 | ||||
Unlock | 21048457 | 31 days ago | IN | 0 ETH | 0.00048336 | ||||
Unlock | 21011831 | 36 days ago | IN | 0 ETH | 0.00071041 | ||||
Lock | 21010886 | 36 days ago | IN | 0 ETH | 0.00040087 | ||||
Lock | 20991754 | 39 days ago | IN | 0 ETH | 0.00117452 | ||||
Unlock | 20987472 | 40 days ago | IN | 0 ETH | 0.00233867 | ||||
Unlock | 20983410 | 40 days ago | IN | 0 ETH | 0.00087023 | ||||
Unlock | 20959745 | 43 days ago | IN | 0 ETH | 0.00091167 | ||||
Unlock | 20959695 | 43 days ago | IN | 0 ETH | 0.00130463 | ||||
Unlock | 20925192 | 48 days ago | IN | 0 ETH | 0.00152796 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TeleportCustody
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)Audit Report
/** *Submitted for verification at Etherscan.io on 2021-01-20 */ // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/teleport/ethereum/TeleportAdmin.sol pragma solidity 0.6.12; /** * @dev Contract module which provides a basic access control mechanism, where * there are multiple accounts (admins) that can be granted exclusive access to * specific functions. * * This module is used through inheritance. It will make available the modifier * `consumeAuthorization`, which can be applied to your functions to restrict * their use to the admins. */ contract TeleportAdmin is Ownable { // Marks that the contract is frozen or unfrozen (safety kill-switch) bool private _isFrozen; mapping(address => uint256) private _allowedAmount; event AdminUpdated(address indexed account, uint256 allowedAmount); // Modifiers /** * @dev Throw if contract is currently frozen. */ modifier notFrozen() { require( !_isFrozen, "TeleportAdmin: contract is frozen by owner" ); _; } /** * @dev Throw if caller does not have sufficient authorized amount. */ modifier consumeAuthorization(uint256 amount) { address sender = _msgSender(); require( allowedAmount(sender) >= amount, "TeleportAdmin: caller does not have sufficient authorization" ); _; // reduce authorization amount. Underflow cannot occur because we have // already checked that admin has sufficient allowed amount. _allowedAmount[sender] -= amount; emit AdminUpdated(sender, _allowedAmount[sender]); } /** * @dev Checks the authorized amount of an admin account. */ function allowedAmount(address account) public view returns (uint256) { return _allowedAmount[account]; } /** * @dev Returns if the contract is currently frozen. */ function isFrozen() public view returns (bool) { return _isFrozen; } /** * @dev Owner freezes the contract. */ function freeze() public onlyOwner { _isFrozen = true; } /** * @dev Owner unfreezes the contract. */ function unfreeze() public onlyOwner { _isFrozen = false; } /** * @dev Updates the admin status of an account. * Can only be called by the current owner. */ function updateAdmin(address account, uint256 newAllowedAmount) public virtual onlyOwner { emit AdminUpdated(account, newAllowedAmount); _allowedAmount[account] = newAllowedAmount; } /** * @dev Overrides the inherited method from Ownable. * Disable ownership resounce. */ function renounceOwnership() public override onlyOwner { revert("TeleportAdmin: ownership cannot be renounced"); } } // File: contracts/teleport/ethereum/TetherToken.sol pragma solidity 0.6.12; /** * @dev Method signature contract for Tether (USDT) because it's not a standard * ERC-20 contract and have different method signatures. */ interface TetherToken { function transfer(address _to, uint _value) external; function transferFrom(address _from, address _to, uint _value) external; } // File: contracts/teleport/ethereum/TeleportCustody.sol // SPDX-License-Identifier: MIT pragma solidity 0.6.12; // import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; /** * @dev Implementation of the TeleportCustody contract. * * There are two priviledged roles for the contract: "owner" and "admin". * * Owner: Has the ultimate control of the contract and the funds stored inside the * contract. Including: * 1) "freeze" and "unfreeze" the contract: when the TeleportCustody is frozen, * all deposits and withdrawals with the TeleportCustody is disabled. This * should only happen when a major security risk is spotted or if admin access * is comprimised. * 2) assign "admins": owner has the authority to grant "unlock" permission to * "admins" and set proper "unlock limit" for each "admin". * * Admin: Has the authority to "unlock" specific amount to tokens to receivers. */ contract TeleportCustody is TeleportAdmin { // USDC // ERC20 internal _tokenContract = ERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48); // USDT TetherToken internal _tokenContract = TetherToken(0xdAC17F958D2ee523a2206206994597C13D831ec7); // Records that an unlock transaction has been executed mapping(bytes32 => bool) internal _unlocked; // Emmitted when user locks token and initiates teleport event Locked(uint256 amount, bytes8 indexed flowAddress, address indexed ethereumAddress); // Emmitted when teleport completes and token gets unlocked event Unlocked(uint256 amount, address indexed ethereumAddress, bytes32 indexed flowHash); /** * @dev User locks token and initiates teleport request. */ function lock(uint256 amount, bytes8 flowAddress) public notFrozen { address sender = _msgSender(); // NOTE: Return value should be checked. However, Tether does not have return value. _tokenContract.transferFrom(sender, address(this), amount); emit Locked(amount, flowAddress, sender); } // Admin methods /** * @dev TeleportAdmin unlocks token upon receiving teleport request from Flow. */ function unlock(uint256 amount, address ethereumAddress, bytes32 flowHash) public notFrozen consumeAuthorization(amount) { _unlock(amount, ethereumAddress, flowHash); } // Owner methods /** * @dev Owner unlocks token upon receiving teleport request from Flow. * There is no unlock limit for owner. */ function unlockByOwner(uint256 amount, address ethereumAddress, bytes32 flowHash) public notFrozen onlyOwner { _unlock(amount, ethereumAddress, flowHash); } // Internal methods /** * @dev Internal function for processing unlock requests. * * There is no way TeleportCustody can check the validity of the target address * beforehand so user and admin should always make sure the provided information * is correct. */ function _unlock(uint256 amount, address ethereumAddress, bytes32 flowHash) internal { require(ethereumAddress != address(0), "TeleportCustody: ethereumAddress is the zero address"); require(!_unlocked[flowHash], "TeleportCustody: same unlock hash has been executed"); _unlocked[flowHash] = true; // NOTE: Return value should be checked. However, Tether does not have return value. _tokenContract.transfer(ethereumAddress, amount); emit Unlocked(amount, ethereumAddress, flowHash); } }
Contract Security Audit
- Quantstamp - January 18th, 2021 - Security Audit Report
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"allowedAmount","type":"uint256"}],"name":"AdminUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bytes8","name":"flowAddress","type":"bytes8"},{"indexed":true,"internalType":"address","name":"ethereumAddress","type":"address"}],"name":"Locked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"ethereumAddress","type":"address"},{"indexed":true,"internalType":"bytes32","name":"flowHash","type":"bytes32"}],"name":"Unlocked","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"allowedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes8","name":"flowAddress","type":"bytes8"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unfreeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"ethereumAddress","type":"address"},{"internalType":"bytes32","name":"flowHash","type":"bytes32"}],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"ethereumAddress","type":"address"},{"internalType":"bytes32","name":"flowHash","type":"bytes32"}],"name":"unlockByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"newAllowedAmount","type":"uint256"}],"name":"updateAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600280546001600160a01b03191673dac17f958d2ee523a2206206994597c13d831ec717905534801561003657600080fd5b506000610041610090565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610094565b3390565b610bef806100a36000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063715018a611610081578063915420401161005b57806391542040146101cb578063aad33ccd14610203578063f2fde38b14610235576100c9565b8063715018a614610173578063734d37dd1461017b5780638da5cb5b146101a7576100c9565b806356dd3895116100b257806356dd38951461011e57806362a5af3b146101635780636a28f0001461016b576100c9565b80630da61ed2146100ce57806333eeb14714610102575b600080fd5b610100600480360360608110156100e457600080fd5b508035906001600160a01b03602082013516906040013561025b565b005b61010a610360565b604080519115158252519081900360200190f35b6101006004803603604081101561013457600080fd5b50803590602001357fffffffffffffffff00000000000000000000000000000000000000000000000016610370565b6101006104b8565b610100610537565b6101006105b0565b6101006004803603604081101561019157600080fd5b506001600160a01b038135169060200135610651565b6101af610716565b604080516001600160a01b039092168252519081900360200190f35b6101f1600480360360208110156101e157600080fd5b50356001600160a01b0316610725565b60408051918252519081900360200190f35b6101006004803603606081101561021957600080fd5b508035906001600160a01b036020820135169060400135610740565b6101006004803603602081101561024b57600080fd5b50356001600160a01b0316610803565b600054600160a01b900460ff16156102a45760405162461bcd60e51b815260040180806020018281038252602a815260200180610b30602a913960400191505060405180910390fd5b8260006102af610925565b9050816102bb82610725565b10156102f85760405162461bcd60e51b815260040180806020018281038252603c815260200180610af4603c913960400191505060405180910390fd5b610303858585610929565b6001600160a01b038116600081815260016020908152604091829020805486900390819055825190815291517fabfafa62f2f183eb8fe4ae2293ed2d954001a6a345c459031f171dedad91824e9281900390910190a25050505050565b600054600160a01b900460ff1690565b600054600160a01b900460ff16156103b95760405162461bcd60e51b815260040180806020018281038252602a815260200180610b30602a913960400191505060405180910390fd5b60006103c3610925565b600254604080517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301523060248301526044820188905291519394509116916323b872dd9160648082019260009290919082900301818387803b15801561043957600080fd5b505af115801561044d573d6000803e3d6000fd5b50506040805186815290516001600160a01b03851693507fffffffffffffffff000000000000000000000000000000000000000000000000861692507f80f175843b31923d59bca655f7e465ee566b9935cee89dc4ed3e364e989ca5ca9181900360200190a3505050565b6104c0610925565b6000546001600160a01b03908116911614610522576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b179055565b61053f610925565b6000546001600160a01b039081169116146105a1576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460ff60a01b19169055565b6105b8610925565b6000546001600160a01b0390811691161461061a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60405162461bcd60e51b815260040180806020018281038252602c815260200180610b5a602c913960400191505060405180910390fd5b610659610925565b6000546001600160a01b039081169116146106bb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6040805182815290516001600160a01b038416917fabfafa62f2f183eb8fe4ae2293ed2d954001a6a345c459031f171dedad91824e919081900360200190a26001600160a01b03909116600090815260016020526040902055565b6000546001600160a01b031690565b6001600160a01b031660009081526001602052604090205490565b600054600160a01b900460ff16156107895760405162461bcd60e51b815260040180806020018281038252602a815260200180610b30602a913960400191505060405180910390fd5b610791610925565b6000546001600160a01b039081169116146107f3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6107fe838383610929565b505050565b61080b610925565b6000546001600160a01b0390811691161461086d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166108b25760405162461bcd60e51b8152600401808060200182810382526026815260200180610ace6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b3390565b6001600160a01b03821661096e5760405162461bcd60e51b8152600401808060200182810382526034815260200180610b866034913960400191505060405180910390fd5b60008181526003602052604090205460ff16156109bc5760405162461bcd60e51b8152600401808060200182810382526033815260200180610a9b6033913960400191505060405180910390fd5b600081815260036020526040808220805460ff1916600117905560025481517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018890529251929091169263a9059cbb9260448084019382900301818387803b158015610a3d57600080fd5b505af1158015610a51573d6000803e3d6000fd5b50506040805186815290518493506001600160a01b03861692507f3c342bec7fbc1c28938255a591687f9d3f5a716eb7d26999e74607c63927e0b19181900360200190a350505056fe54656c65706f7274437573746f64793a2073616d6520756e6c6f636b206861736820686173206265656e2065786563757465644f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737354656c65706f727441646d696e3a2063616c6c657220646f6573206e6f7420686176652073756666696369656e7420617574686f72697a6174696f6e54656c65706f727441646d696e3a20636f6e74726163742069732066726f7a656e206279206f776e657254656c65706f727441646d696e3a206f776e6572736869702063616e6e6f742062652072656e6f756e63656454656c65706f7274437573746f64793a20657468657265756d4164647265737320697320746865207a65726f2061646472657373a2646970667358221220ef33d6bb9dbc79acfa5d35ebacc1546a55e224267e8b14bbc25a9195361526b464736f6c634300060c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100c95760003560e01c8063715018a611610081578063915420401161005b57806391542040146101cb578063aad33ccd14610203578063f2fde38b14610235576100c9565b8063715018a614610173578063734d37dd1461017b5780638da5cb5b146101a7576100c9565b806356dd3895116100b257806356dd38951461011e57806362a5af3b146101635780636a28f0001461016b576100c9565b80630da61ed2146100ce57806333eeb14714610102575b600080fd5b610100600480360360608110156100e457600080fd5b508035906001600160a01b03602082013516906040013561025b565b005b61010a610360565b604080519115158252519081900360200190f35b6101006004803603604081101561013457600080fd5b50803590602001357fffffffffffffffff00000000000000000000000000000000000000000000000016610370565b6101006104b8565b610100610537565b6101006105b0565b6101006004803603604081101561019157600080fd5b506001600160a01b038135169060200135610651565b6101af610716565b604080516001600160a01b039092168252519081900360200190f35b6101f1600480360360208110156101e157600080fd5b50356001600160a01b0316610725565b60408051918252519081900360200190f35b6101006004803603606081101561021957600080fd5b508035906001600160a01b036020820135169060400135610740565b6101006004803603602081101561024b57600080fd5b50356001600160a01b0316610803565b600054600160a01b900460ff16156102a45760405162461bcd60e51b815260040180806020018281038252602a815260200180610b30602a913960400191505060405180910390fd5b8260006102af610925565b9050816102bb82610725565b10156102f85760405162461bcd60e51b815260040180806020018281038252603c815260200180610af4603c913960400191505060405180910390fd5b610303858585610929565b6001600160a01b038116600081815260016020908152604091829020805486900390819055825190815291517fabfafa62f2f183eb8fe4ae2293ed2d954001a6a345c459031f171dedad91824e9281900390910190a25050505050565b600054600160a01b900460ff1690565b600054600160a01b900460ff16156103b95760405162461bcd60e51b815260040180806020018281038252602a815260200180610b30602a913960400191505060405180910390fd5b60006103c3610925565b600254604080517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301523060248301526044820188905291519394509116916323b872dd9160648082019260009290919082900301818387803b15801561043957600080fd5b505af115801561044d573d6000803e3d6000fd5b50506040805186815290516001600160a01b03851693507fffffffffffffffff000000000000000000000000000000000000000000000000861692507f80f175843b31923d59bca655f7e465ee566b9935cee89dc4ed3e364e989ca5ca9181900360200190a3505050565b6104c0610925565b6000546001600160a01b03908116911614610522576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b179055565b61053f610925565b6000546001600160a01b039081169116146105a1576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460ff60a01b19169055565b6105b8610925565b6000546001600160a01b0390811691161461061a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60405162461bcd60e51b815260040180806020018281038252602c815260200180610b5a602c913960400191505060405180910390fd5b610659610925565b6000546001600160a01b039081169116146106bb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6040805182815290516001600160a01b038416917fabfafa62f2f183eb8fe4ae2293ed2d954001a6a345c459031f171dedad91824e919081900360200190a26001600160a01b03909116600090815260016020526040902055565b6000546001600160a01b031690565b6001600160a01b031660009081526001602052604090205490565b600054600160a01b900460ff16156107895760405162461bcd60e51b815260040180806020018281038252602a815260200180610b30602a913960400191505060405180910390fd5b610791610925565b6000546001600160a01b039081169116146107f3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6107fe838383610929565b505050565b61080b610925565b6000546001600160a01b0390811691161461086d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166108b25760405162461bcd60e51b8152600401808060200182810382526026815260200180610ace6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b3390565b6001600160a01b03821661096e5760405162461bcd60e51b8152600401808060200182810382526034815260200180610b866034913960400191505060405180910390fd5b60008181526003602052604090205460ff16156109bc5760405162461bcd60e51b8152600401808060200182810382526033815260200180610a9b6033913960400191505060405180910390fd5b600081815260036020526040808220805460ff1916600117905560025481517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018890529251929091169263a9059cbb9260448084019382900301818387803b158015610a3d57600080fd5b505af1158015610a51573d6000803e3d6000fd5b50506040805186815290518493506001600160a01b03861692507f3c342bec7fbc1c28938255a591687f9d3f5a716eb7d26999e74607c63927e0b19181900360200190a350505056fe54656c65706f7274437573746f64793a2073616d6520756e6c6f636b206861736820686173206265656e2065786563757465644f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737354656c65706f727441646d696e3a2063616c6c657220646f6573206e6f7420686176652073756666696369656e7420617574686f72697a6174696f6e54656c65706f727441646d696e3a20636f6e74726163742069732066726f7a656e206279206f776e657254656c65706f727441646d696e3a206f776e6572736869702063616e6e6f742062652072656e6f756e63656454656c65706f7274437573746f64793a20657468657265756d4164647265737320697320746865207a65726f2061646472657373a2646970667358221220ef33d6bb9dbc79acfa5d35ebacc1546a55e224267e8b14bbc25a9195361526b464736f6c634300060c0033
Deployed Bytecode Sourcemap
7410:2592:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8628:194;;;;;;;;;;;;;;;;-1:-1:-1;8628:194:0;;;-1:-1:-1;;;;;8628:194:0;;;;;;;;;;:::i;:::-;;5076:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;8174:328;;;;;;;;;;;;;;;;-1:-1:-1;8174:328:0;;;;;;;;;:::i;5231:77::-;;;:::i;5371:80::-;;;:::i;5898:140::-;;;:::i;5572:213::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5572:213:0;;;;;;;;:::i;2066:79::-;;;:::i;:::-;;;;-1:-1:-1;;;;;2066:79:0;;;;;;;;;;;;;;4867:131;;;;;;;;;;;;;;;;-1:-1:-1;4867:131:0;-1:-1:-1;;;;;4867:131:0;;:::i;:::-;;;;;;;;;;;;;;;;8983:182;;;;;;;;;;;;;;;;-1:-1:-1;8983:182:0;;;-1:-1:-1;;;;;8983:182:0;;;;;;;;;;:::i;3011:244::-;;;;;;;;;;;;;;;;-1:-1:-1;3011:244:0;-1:-1:-1;;;;;3011:244:0;;:::i;8628:194::-;4137:9;;-1:-1:-1;;;4137:9:0;;;;4136:10;4120:86;;;;-1:-1:-1;;;4120:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8756:6:::1;4368:14;4385:12;:10;:12::i;:::-;4368:29;;4445:6;4420:21;4434:6;4420:13;:21::i;:::-;:31;;4404:125;;;;-1:-1:-1::0;;;4404:125:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8774:42:::2;8782:6;8790:15;8807:8;8774:7;:42::i;:::-;-1:-1:-1::0;;;;;4690:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;;;;:32;;;;::::1;::::0;;;;4734:44;;;;;;;::::1;::::0;;;;;;;;::::1;4215:1;;8628:194:::0;;;:::o;5076:94::-;5132:4;5155:9;-1:-1:-1;;;5155:9:0;;;;;5076:94::o;8174:328::-;4137:9;;-1:-1:-1;;;4137:9:0;;;;4136:10;4120:86;;;;-1:-1:-1;;;4120:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8261:14:::1;8278:12;:10;:12::i;:::-;8389:14;::::0;:58:::1;::::0;;;;;-1:-1:-1;;;;;8389:58:0;;::::1;;::::0;::::1;::::0;8433:4:::1;8389:58:::0;;;;;;;;;;;;8261:29;;-1:-1:-1;8389:14:0;::::1;::::0;:27:::1;::::0;:58;;;;;:14:::1;::::0;:58;;;;;;;;:14;;:58;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8461:35:0::1;::::0;;;;;;;-1:-1:-1;;;;;8461:35:0;::::1;::::0;-1:-1:-1;8461:35:0;;::::1;::::0;-1:-1:-1;8461:35:0::1;::::0;;;;::::1;::::0;;::::1;4215:1;8174:328:::0;;:::o;5231:77::-;2288:12;:10;:12::i;:::-;2278:6;;-1:-1:-1;;;;;2278:6:0;;;:22;;;2270:67;;;;;-1:-1:-1;;;2270:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5286:9:::1;:16:::0;;-1:-1:-1;;;;5286:16:0::1;-1:-1:-1::0;;;5286:16:0::1;::::0;;5231:77::o;5371:80::-;2288:12;:10;:12::i;:::-;2278:6;;-1:-1:-1;;;;;2278:6:0;;;:22;;;2270:67;;;;;-1:-1:-1;;;2270:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5440:5:::1;5428:17:::0;;-1:-1:-1;;;;5428:17:0::1;::::0;;5371:80::o;5898:140::-;2288:12;:10;:12::i;:::-;2278:6;;-1:-1:-1;;;;;2278:6:0;;;:22;;;2270:67;;;;;-1:-1:-1;;;2270:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5978:54:::1;;-1:-1:-1::0;;;5978:54:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5572:213:::0;2288:12;:10;:12::i;:::-;2278:6;;-1:-1:-1;;;;;2278:6:0;;;:22;;;2270:67;;;;;-1:-1:-1;;;2270:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5691:39:::1;::::0;;;;;;;-1:-1:-1;;;;;5691:39:0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;-1:-1:-1::0;;;;;5737:23:0;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:42;5572:213::o;2066:79::-;2104:7;2131:6;-1:-1:-1;;;;;2131:6:0;2066:79;:::o;4867:131::-;-1:-1:-1;;;;;4969:23:0;4943:7;4969:23;;;:14;:23;;;;;;;4867:131::o;8983:182::-;4137:9;;-1:-1:-1;;;4137:9:0;;;;4136:10;4120:86;;;;-1:-1:-1;;;4120:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2288:12:::1;:10;:12::i;:::-;2278:6;::::0;-1:-1:-1;;;;;2278:6:0;;::::1;:22:::0;::::1;;2270:67;;;::::0;;-1:-1:-1;;;2270:67:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;9117:42:::2;9125:6;9133:15;9150:8;9117:7;:42::i;:::-;8983:182:::0;;;:::o;3011:244::-;2288:12;:10;:12::i;:::-;2278:6;;-1:-1:-1;;;;;2278:6:0;;;:22;;;2270:67;;;;;-1:-1:-1;;;2270:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3100:22:0;::::1;3092:73;;;;-1:-1:-1::0;;;3092:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3202:6;::::0;;3181:38:::1;::::0;-1:-1:-1;;;;;3181:38:0;;::::1;::::0;3202:6;::::1;::::0;3181:38:::1;::::0;::::1;3230:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;3230:17:0;;;::::1;::::0;;;::::1;::::0;;3011:244::o;622:106::-;710:10;622:106;:::o;9469:530::-;-1:-1:-1;;;;;9577:29:0;;9569:94;;;;-1:-1:-1;;;9569:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9679:19;;;;:9;:19;;;;;;;;9678:20;9670:84;;;;-1:-1:-1;;;9670:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9763:19;;;;:9;:19;;;;;;:26;;-1:-1:-1;;9763:26:0;9785:4;9763:26;;;9888:14;;:48;;;;;-1:-1:-1;;;;;9888:48:0;;;;;;;;;;;;;;;:14;;;;;:23;;:48;;;;;;;;;;9763:19;9888:14;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9950:43:0;;;;;;;;9984:8;;-1:-1:-1;;;;;;9950:43:0;;;-1:-1:-1;9950:43:0;;;;;;;;;9469:530;;;:::o
Swarm Source
ipfs://ef33d6bb9dbc79acfa5d35ebacc1546a55e224267e8b14bbc25a9195361526b4
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.