Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 250 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 17026046 | 618 days ago | IN | 0 ETH | 0.00085538 | ||||
Claim Stuck Toke... | 17017415 | 619 days ago | IN | 0 ETH | 0.0005134 | ||||
Claim Stuck Toke... | 17017408 | 619 days ago | IN | 0 ETH | 0.00047143 | ||||
Claim Stuck Toke... | 17017404 | 619 days ago | IN | 0 ETH | 0.00049547 | ||||
Claim Stuck Toke... | 17001607 | 621 days ago | IN | 0 ETH | 0.00045993 | ||||
Claim Stuck Toke... | 17001451 | 621 days ago | IN | 0 ETH | 0.00054798 | ||||
Transfer | 16992537 | 623 days ago | IN | 0 ETH | 0.00314169 | ||||
Transfer | 16992532 | 623 days ago | IN | 0 ETH | 0.00463717 | ||||
Transfer | 16970951 | 626 days ago | IN | 0 ETH | 0.00482305 | ||||
Transfer | 16970949 | 626 days ago | IN | 0 ETH | 0.0079494 | ||||
Transfer | 16970211 | 626 days ago | IN | 0 ETH | 0.00856966 | ||||
Transfer | 16970209 | 626 days ago | IN | 0 ETH | 0.01358236 | ||||
Transfer | 16970150 | 626 days ago | IN | 0 ETH | 0.01014967 | ||||
Transfer | 16970148 | 626 days ago | IN | 0 ETH | 0.01735682 | ||||
Transfer | 16923290 | 632 days ago | IN | 0 ETH | 0.00317118 | ||||
Transfer | 16923289 | 633 days ago | IN | 0 ETH | 0.00477061 | ||||
Transfer | 16892981 | 637 days ago | IN | 0 ETH | 0.0032039 | ||||
Transfer | 16892981 | 637 days ago | IN | 0 ETH | 0.00537994 | ||||
Transfer | 16882689 | 638 days ago | IN | 0 ETH | 0.00175094 | ||||
Transfer | 16882688 | 638 days ago | IN | 0 ETH | 0.0029046 | ||||
Transfer | 16858494 | 642 days ago | IN | 0 ETH | 0.00166993 | ||||
Transfer | 16858493 | 642 days ago | IN | 0 ETH | 0.00290612 | ||||
Transfer | 16858476 | 642 days ago | IN | 0 ETH | 0.0014935 | ||||
Transfer | 16858475 | 642 days ago | IN | 0 ETH | 0.00305898 | ||||
Transfer | 16838166 | 644 days ago | IN | 0 ETH | 0.00224977 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Validator
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } library Address { function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: weiValue}( data ); if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastValue; // Update the index for the moved value set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { bytes32[] memory store = _values(set._inner); bytes32[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values in the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } } interface IBridge { function transfer ( address receiver, uint256 amount, uint256 fromChainID, uint256 _txNonce ) external; function validNonce ( uint256 fromChainID, uint256 _txNonce ) external view returns (uint256); function isBridgeActive () external view returns (bool); } contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the 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; } } contract Validator is Context, Ownable { using Address for address; using EnumerableSet for EnumerableSet.AddressSet; using EnumerableSet for EnumerableSet.Bytes32Set; EnumerableSet.AddressSet private _operators; EnumerableSet.Bytes32Set private _requests; struct Transfer { address receiver; uint256 amount; uint256 fromChainID; uint256 nonce; uint256 validations; mapping(address => bool) validators; } mapping(bytes32 => Transfer) public transfers; IBridge public bridge; string private _name = "POM Validator"; string private _symbol = "POM Validator"; uint256 public requiredValidations; event TransferValidation( address indexed receiver, uint256 amount, uint256 fromChainID, uint256 nonce, uint256 validations ); event TransferValidated( address indexed receiver, uint256 amount, uint256 fromChainID, uint256 nonce, uint256 validations ); constructor(address _bridge) { bridge = IBridge(_bridge); requiredValidations = 2; } modifier onlyBridgeActive() { require(bridge.isBridgeActive(), "Bridge is not active"); _; } modifier onlyOperator(){ require(_operators.contains(_msgSender()), "Caller is not an operator"); _; } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function setRequiredValidations(uint256 _requiredValidations) public onlyOwner { require(_requiredValidations > 0, "Error: Required validations must be greater than 0"); requiredValidations = _requiredValidations; } function isOperator(address _operator) public view returns (bool) { return _operators.contains(_operator); } function addOperator(address _operator) public onlyOwner { require(!_operators.contains(_operator), "Error: Already added!"); _operators.add(_operator); } function removeOperator(address _operator) public onlyOwner { require(_operators.contains(_operator), "Error: Not added!"); _operators.remove(_operator); } function getOperators() public view returns (address[] memory) { uint256 length = _operators.length(); address[] memory operators = new address[](length); for (uint256 i = 0; i < length; i++) { operators[i] = _operators.at(i); } return operators; } function validNonce( uint256 fromChainID, uint256 _txNonce ) external view returns (uint256) { return bridge.validNonce(fromChainID, _txNonce); } function isRequestExist(bytes32 _request) public view returns (bool) { return _requests.contains(_request); } function addRequest(bytes32 _request) public onlyOperator { require(!_requests.contains(_request), "Error: Already added!"); _requests.add(_request); } function getRequests() public view returns (bytes32[] memory) { uint256 length = _requests.length(); bytes32[] memory requests = new bytes32[](length); for (uint256 i = 0; i < length; i++) { requests[i] = _requests.at(i); } return requests; } function transfer( address receiver, uint256 amount, uint256 fromChainID, uint256 _txNonce ) external onlyOperator { require(bridge.validNonce(fromChainID,_txNonce) == 0,"Error: This transfer has been proceed!"); bytes32 request = keccak256(abi.encodePacked(receiver, amount, fromChainID, _txNonce)); require(!transfers[request].validators[_msgSender()], "Error: Already validated!"); if (isRequestExist(request)) { transfers[request].validators[_msgSender()] = true; transfers[request].validations++; if(transfers[request].validations >= requiredValidations) { bridge.transfer(receiver, amount, fromChainID, _txNonce); emit TransferValidated(receiver, amount, fromChainID, _txNonce, transfers[request].validations); } } else { transfers[request].validators[_msgSender()] = true; addRequest(request); transfers[request].receiver = receiver; transfers[request].amount = amount; transfers[request].fromChainID = fromChainID; transfers[request].nonce = _txNonce; transfers[request].validations = 1; } emit TransferValidation(receiver, amount, fromChainID, _txNonce, transfers[request].validations); } function claimStuckTokens(address tokenAddress) external onlyOwner { IERC20(tokenAddress).transfer(_msgSender(), IERC20(tokenAddress).balanceOf(address(this))); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_bridge","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"validations","type":"uint256"}],"name":"TransferValidated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"validations","type":"uint256"}],"name":"TransferValidation","type":"event"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"addOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_request","type":"bytes32"}],"name":"addRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bridge","outputs":[{"internalType":"contract IBridge","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOperators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRequests","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_request","type":"bytes32"}],"name":"isRequestExist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"}],"name":"removeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requiredValidations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_requiredValidations","type":"uint256"}],"name":"setRequiredValidations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"},{"internalType":"uint256","name":"_txNonce","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"transfers","outputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"validations","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"fromChainID","type":"uint256"},{"internalType":"uint256","name":"_txNonce","type":"uint256"}],"name":"validNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c0604052600d60809081526c2827a6902b30b634b230ba37b960991b60a0526007906200002e9082620001a4565b5060408051808201909152600d81526c2827a6902b30b634b230ba37b960991b6020820152600890620000629082620001a4565b503480156200007057600080fd5b506040516200158938038062001589833981016040819052620000939162000270565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600680546001600160a01b0319166001600160a01b03929092169190911790556002600955620002a2565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200012a57607f821691505b6020821081036200014b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200019f57600081815260208120601f850160051c810160208610156200017a5750805b601f850160051c820191505b818110156200019b5782815560010162000186565b5050505b505050565b81516001600160401b03811115620001c057620001c0620000ff565b620001d881620001d1845462000115565b8462000151565b602080601f831160018114620002105760008415620001f75750858301515b600019600386901b1c1916600185901b1785556200019b565b600085815260208120601f198616915b82811015620002415788860151825594840194600190910190840162000220565b5085821015620002605787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200028357600080fd5b81516001600160a01b03811681146200029b57600080fd5b9392505050565b6112d780620002b26000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063b6510bb311610071578063b6510bb3146102a4578063d876594b146102b7578063e78cea92146102ca578063f2fde38b146102dd578063f9d0831a146102f057600080fd5b80638da5cb5b1461025157806395d89b41146102765780639870d7fe1461027e578063ac8a584a1461029157600080fd5b80633c64f04b116100e95780633c64f04b1461017a5780633f73cf32146101f35780636d70f7ae1461020657806383751a81146102295780638813ce121461023c57600080fd5b806306fdde031461011b5780630de1e2b41461013957806316ed26391461015057806327a099d814610165575b600080fd5b610123610303565b6040516101309190610fee565b60405180910390f35b61014260095481565b604051908152602001610130565b61016361015e36600461103c565b610395565b005b61016d610438565b6040516101309190611055565b6101c161018836600461103c565b600560205260009081526040902080546001820154600283015460038401546004909401546001600160a01b0390931693919290919085565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610130565b6101426102013660046110a2565b6104e8565b6102196102143660046110e0565b610566565b6040519015158152602001610130565b61021961023736600461103c565b610573565b610244610580565b60405161013091906110fb565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610130565b61012361061c565b61016361028c3660046110e0565b61062b565b61016361029f3660046110e0565b6106b4565b6101636102b2366004611133565b610734565b6101636102c536600461103c565b610b55565b60065461025e906001600160a01b031681565b6101636102eb3660046110e0565b610c01565b6101636102fe3660046110e0565b610ceb565b6060600780546103129061116c565b80601f016020809104026020016040519081016040528092919081815260200182805461033e9061116c565b801561038b5780601f106103605761010080835404028352916020019161038b565b820191906000526020600020905b81548152906001019060200180831161036e57829003601f168201915b5050505050905090565b6000546001600160a01b031633146103c85760405162461bcd60e51b81526004016103bf906111a6565b60405180910390fd5b600081116104335760405162461bcd60e51b815260206004820152603260248201527f4572726f723a2052657175697265642076616c69646174696f6e73206d75737460448201527102062652067726561746572207468616e20360741b60648201526084016103bf565b600955565b606060006104466001610dfc565b905060008167ffffffffffffffff811115610463576104636111db565b60405190808252806020026020018201604052801561048c578160200160208202803683370190505b50905060005b828110156104e1576104a5600182610e06565b8282815181106104b7576104b76111f1565b6001600160a01b0390921660209283029190910190910152806104d98161121d565b915050610492565b5092915050565b600654604051631fb9e79960e11b815260048101849052602481018390526000916001600160a01b031690633f73cf3290604401602060405180830381865afa158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d9190611236565b90505b92915050565b6000610560600183610e12565b6000610560600383610e34565b6060600061058e6003610dfc565b905060008167ffffffffffffffff8111156105ab576105ab6111db565b6040519080825280602002602001820160405280156105d4578160200160208202803683370190505b50905060005b828110156104e1576105ed600382610e06565b8282815181106105ff576105ff6111f1565b6020908102919091010152806106148161121d565b9150506105da565b6060600880546103129061116c565b6000546001600160a01b031633146106555760405162461bcd60e51b81526004016103bf906111a6565b610660600182610e12565b156106a55760405162461bcd60e51b81526020600482015260156024820152744572726f723a20416c72656164792061646465642160581b60448201526064016103bf565b6106b0600182610e4c565b5050565b6000546001600160a01b031633146106de5760405162461bcd60e51b81526004016103bf906111a6565b6106e9600182610e12565b6107295760405162461bcd60e51b81526020600482015260116024820152704572726f723a204e6f742061646465642160781b60448201526064016103bf565b6106b0600182610e61565b610741335b600190610e12565b6107895760405162461bcd60e51b815260206004820152601960248201527821b0b63632b91034b9903737ba1030b71037b832b930ba37b960391b60448201526064016103bf565b600654604051631fb9e79960e11b815260048101849052602481018390526001600160a01b0390911690633f73cf3290604401602060405180830381865afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190611236565b156108595760405162461bcd60e51b815260206004820152602660248201527f4572726f723a2054686973207472616e7366657220686173206265656e2070726044820152656f636565642160d01b60648201526084016103bf565b6040516bffffffffffffffffffffffff19606086901b1660208201526034810184905260548101839052607481018290526000906094016040516020818303038152906040528051906020012090506005600082815260200190815260200160002060050160006108c73390565b6001600160a01b0316815260208101919091526040016000205460ff16156109315760405162461bcd60e51b815260206004820152601960248201527f4572726f723a20416c72656164792076616c696461746564210000000000000060448201526064016103bf565b61093a81610573565b15610a775760008181526005602081815260408084203385528084018352908420805460ff1916600117905584845291905260040180549161097b8361121d565b909155505060095460008281526005602052604090206004015410610a725760065460405163b6510bb360e01b81526001600160a01b0387811660048301526024820187905260448201869052606482018590529091169063b6510bb390608401600060405180830381600087803b1580156109f657600080fd5b505af1158015610a0a573d6000803e3d6000fd5b505050600082815260056020908152604091829020600401548251888152918201879052818301869052606082015290516001600160a01b03881692507f203f6f0372ef5ba84bf16b3b81c169d4dc16a4ab6fc3beccddba67865cf101cb9181900360800190a25b610aea565b600081815260056020818152604080842033855290920190529020805460ff19166001179055610aa681610b55565b600081815260056020526040902080546001600160a01b0319166001600160a01b038716178155600180820186905560028201859055600382018490556004909101555b600081815260056020908152604091829020600401548251878152918201869052818301859052606082015290516001600160a01b038716917fad4a40cfe0eb750bee50b50f0c26de38e9b071f86be6e8ab51fa5a0aabb0e666919081900360800190a25050505050565b610b5e33610739565b610ba65760405162461bcd60e51b815260206004820152601960248201527821b0b63632b91034b9903737ba1030b71037b832b930ba37b960391b60448201526064016103bf565b610bb1600382610e34565b15610bf65760405162461bcd60e51b81526020600482015260156024820152744572726f723a20416c72656164792061646465642160581b60448201526064016103bf565b6106b0600382610e76565b6000546001600160a01b03163314610c2b5760405162461bcd60e51b81526004016103bf906111a6565b6001600160a01b038116610c905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103bf565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610d155760405162461bcd60e51b81526004016103bf906111a6565b6001600160a01b03811663a9059cbb336040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015610d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8d9190611236565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610dd8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b0919061124f565b6000610560825490565b600061055d8383610e82565b6001600160a01b0381166000908152600183016020526040812054151561055d565b6000818152600183016020526040812054151561055d565b600061055d836001600160a01b038416610eac565b600061055d836001600160a01b038416610efb565b600061055d8383610eac565b6000826000018281548110610e9957610e996111f1565b9060005260206000200154905092915050565b6000818152600183016020526040812054610ef357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610560565b506000610560565b60008181526001830160205260408120548015610fe4576000610f1f600183611278565b8554909150600090610f3390600190611278565b9050818114610f98576000866000018281548110610f5357610f536111f1565b9060005260206000200154905080876000018481548110610f7657610f766111f1565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610fa957610fa961128b565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610560565b6000915050610560565b600060208083528351808285015260005b8181101561101b57858101830151858201604001528201610fff565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561104e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156110965783516001600160a01b031683529284019291840191600101611071565b50909695505050505050565b600080604083850312156110b557600080fd5b50508035926020909101359150565b80356001600160a01b03811681146110db57600080fd5b919050565b6000602082840312156110f257600080fd5b61055d826110c4565b6020808252825182820181905260009190848201906040850190845b8181101561109657835183529284019291840191600101611117565b6000806000806080858703121561114957600080fd5b611152856110c4565b966020860135965060408601359560600135945092505050565b600181811c9082168061118057607f821691505b6020821081036111a057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161122f5761122f611207565b5060010190565b60006020828403121561124857600080fd5b5051919050565b60006020828403121561126157600080fd5b8151801515811461127157600080fd5b9392505050565b8181038181111561056057610560611207565b634e487b7160e01b600052603160045260246000fdfea26469706673582212201515ad5e67182716b87774218b89627ec496280c14a7cf26d86b85051b34abab64736f6c63430008110033000000000000000000000000743f469f4a603bd2e0d2e78e47292a9bdbb1a860
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063b6510bb311610071578063b6510bb3146102a4578063d876594b146102b7578063e78cea92146102ca578063f2fde38b146102dd578063f9d0831a146102f057600080fd5b80638da5cb5b1461025157806395d89b41146102765780639870d7fe1461027e578063ac8a584a1461029157600080fd5b80633c64f04b116100e95780633c64f04b1461017a5780633f73cf32146101f35780636d70f7ae1461020657806383751a81146102295780638813ce121461023c57600080fd5b806306fdde031461011b5780630de1e2b41461013957806316ed26391461015057806327a099d814610165575b600080fd5b610123610303565b6040516101309190610fee565b60405180910390f35b61014260095481565b604051908152602001610130565b61016361015e36600461103c565b610395565b005b61016d610438565b6040516101309190611055565b6101c161018836600461103c565b600560205260009081526040902080546001820154600283015460038401546004909401546001600160a01b0390931693919290919085565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610130565b6101426102013660046110a2565b6104e8565b6102196102143660046110e0565b610566565b6040519015158152602001610130565b61021961023736600461103c565b610573565b610244610580565b60405161013091906110fb565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610130565b61012361061c565b61016361028c3660046110e0565b61062b565b61016361029f3660046110e0565b6106b4565b6101636102b2366004611133565b610734565b6101636102c536600461103c565b610b55565b60065461025e906001600160a01b031681565b6101636102eb3660046110e0565b610c01565b6101636102fe3660046110e0565b610ceb565b6060600780546103129061116c565b80601f016020809104026020016040519081016040528092919081815260200182805461033e9061116c565b801561038b5780601f106103605761010080835404028352916020019161038b565b820191906000526020600020905b81548152906001019060200180831161036e57829003601f168201915b5050505050905090565b6000546001600160a01b031633146103c85760405162461bcd60e51b81526004016103bf906111a6565b60405180910390fd5b600081116104335760405162461bcd60e51b815260206004820152603260248201527f4572726f723a2052657175697265642076616c69646174696f6e73206d75737460448201527102062652067726561746572207468616e20360741b60648201526084016103bf565b600955565b606060006104466001610dfc565b905060008167ffffffffffffffff811115610463576104636111db565b60405190808252806020026020018201604052801561048c578160200160208202803683370190505b50905060005b828110156104e1576104a5600182610e06565b8282815181106104b7576104b76111f1565b6001600160a01b0390921660209283029190910190910152806104d98161121d565b915050610492565b5092915050565b600654604051631fb9e79960e11b815260048101849052602481018390526000916001600160a01b031690633f73cf3290604401602060405180830381865afa158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d9190611236565b90505b92915050565b6000610560600183610e12565b6000610560600383610e34565b6060600061058e6003610dfc565b905060008167ffffffffffffffff8111156105ab576105ab6111db565b6040519080825280602002602001820160405280156105d4578160200160208202803683370190505b50905060005b828110156104e1576105ed600382610e06565b8282815181106105ff576105ff6111f1565b6020908102919091010152806106148161121d565b9150506105da565b6060600880546103129061116c565b6000546001600160a01b031633146106555760405162461bcd60e51b81526004016103bf906111a6565b610660600182610e12565b156106a55760405162461bcd60e51b81526020600482015260156024820152744572726f723a20416c72656164792061646465642160581b60448201526064016103bf565b6106b0600182610e4c565b5050565b6000546001600160a01b031633146106de5760405162461bcd60e51b81526004016103bf906111a6565b6106e9600182610e12565b6107295760405162461bcd60e51b81526020600482015260116024820152704572726f723a204e6f742061646465642160781b60448201526064016103bf565b6106b0600182610e61565b610741335b600190610e12565b6107895760405162461bcd60e51b815260206004820152601960248201527821b0b63632b91034b9903737ba1030b71037b832b930ba37b960391b60448201526064016103bf565b600654604051631fb9e79960e11b815260048101849052602481018390526001600160a01b0390911690633f73cf3290604401602060405180830381865afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190611236565b156108595760405162461bcd60e51b815260206004820152602660248201527f4572726f723a2054686973207472616e7366657220686173206265656e2070726044820152656f636565642160d01b60648201526084016103bf565b6040516bffffffffffffffffffffffff19606086901b1660208201526034810184905260548101839052607481018290526000906094016040516020818303038152906040528051906020012090506005600082815260200190815260200160002060050160006108c73390565b6001600160a01b0316815260208101919091526040016000205460ff16156109315760405162461bcd60e51b815260206004820152601960248201527f4572726f723a20416c72656164792076616c696461746564210000000000000060448201526064016103bf565b61093a81610573565b15610a775760008181526005602081815260408084203385528084018352908420805460ff1916600117905584845291905260040180549161097b8361121d565b909155505060095460008281526005602052604090206004015410610a725760065460405163b6510bb360e01b81526001600160a01b0387811660048301526024820187905260448201869052606482018590529091169063b6510bb390608401600060405180830381600087803b1580156109f657600080fd5b505af1158015610a0a573d6000803e3d6000fd5b505050600082815260056020908152604091829020600401548251888152918201879052818301869052606082015290516001600160a01b03881692507f203f6f0372ef5ba84bf16b3b81c169d4dc16a4ab6fc3beccddba67865cf101cb9181900360800190a25b610aea565b600081815260056020818152604080842033855290920190529020805460ff19166001179055610aa681610b55565b600081815260056020526040902080546001600160a01b0319166001600160a01b038716178155600180820186905560028201859055600382018490556004909101555b600081815260056020908152604091829020600401548251878152918201869052818301859052606082015290516001600160a01b038716917fad4a40cfe0eb750bee50b50f0c26de38e9b071f86be6e8ab51fa5a0aabb0e666919081900360800190a25050505050565b610b5e33610739565b610ba65760405162461bcd60e51b815260206004820152601960248201527821b0b63632b91034b9903737ba1030b71037b832b930ba37b960391b60448201526064016103bf565b610bb1600382610e34565b15610bf65760405162461bcd60e51b81526020600482015260156024820152744572726f723a20416c72656164792061646465642160581b60448201526064016103bf565b6106b0600382610e76565b6000546001600160a01b03163314610c2b5760405162461bcd60e51b81526004016103bf906111a6565b6001600160a01b038116610c905760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103bf565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610d155760405162461bcd60e51b81526004016103bf906111a6565b6001600160a01b03811663a9059cbb336040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015610d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8d9190611236565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610dd8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b0919061124f565b6000610560825490565b600061055d8383610e82565b6001600160a01b0381166000908152600183016020526040812054151561055d565b6000818152600183016020526040812054151561055d565b600061055d836001600160a01b038416610eac565b600061055d836001600160a01b038416610efb565b600061055d8383610eac565b6000826000018281548110610e9957610e996111f1565b9060005260206000200154905092915050565b6000818152600183016020526040812054610ef357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610560565b506000610560565b60008181526001830160205260408120548015610fe4576000610f1f600183611278565b8554909150600090610f3390600190611278565b9050818114610f98576000866000018281548110610f5357610f536111f1565b9060005260206000200154905080876000018481548110610f7657610f766111f1565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610fa957610fa961128b565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610560565b6000915050610560565b600060208083528351808285015260005b8181101561101b57858101830151858201604001528201610fff565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561104e57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156110965783516001600160a01b031683529284019291840191600101611071565b50909695505050505050565b600080604083850312156110b557600080fd5b50508035926020909101359150565b80356001600160a01b03811681146110db57600080fd5b919050565b6000602082840312156110f257600080fd5b61055d826110c4565b6020808252825182820181905260009190848201906040850190845b8181101561109657835183529284019291840191600101611117565b6000806000806080858703121561114957600080fd5b611152856110c4565b966020860135965060408601359560600135945092505050565b600181811c9082168061118057607f821691505b6020821081036111a057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161122f5761122f611207565b5060010190565b60006020828403121561124857600080fd5b5051919050565b60006020828403121561126157600080fd5b8151801515811461127157600080fd5b9392505050565b8181038181111561056057610560611207565b634e487b7160e01b600052603160045260246000fdfea26469706673582212201515ad5e67182716b87774218b89627ec496280c14a7cf26d86b85051b34abab64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000743f469f4a603bd2e0d2e78e47292a9bdbb1a860
-----Decoded View---------------
Arg [0] : _bridge (address): 0x743F469f4A603bD2e0D2e78E47292A9bDBb1a860
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000743f469f4a603bd2e0d2e78e47292a9bdbb1a860
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.