Contract 0xd1f9DED8849A87AE404fb9d885E7f6a81f07309c 1

 

Contract Overview

Balance:
0 MATIC

MATIC Value:
$0.00

Token:
Ad
Ad
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xa3fc47c4a68d169cad8baa21f3a0b3284b3b8a15881559d05c1b67f06f036fd6Enter119272742021-03-12 15:04:35219 days 32 mins agoSwapMatic: Deployer IN  0xd1f9ded8849a87ae404fb9d885e7f6a81f07309c0 MATIC0.000023728
0x79e7e0af5453bd251b9daf7fff52f6f8e076eeb8e5235b07ba76b5f421b676d5Pair93872342021-01-09 22:01:50280 days 17 hrs agoSwapMatic: Deployer IN  0xd1f9ded8849a87ae404fb9d885e7f6a81f07309c0 MATIC0.000028564
0x7f64a1ed37753779cc258b62584f06953bcd36cfbf285fb7b97510f34da8b9b7Exit90187572021-01-01 2:51:52289 days 12 hrs agoSwapMatic: Deployer IN  0xd1f9ded8849a87ae404fb9d885e7f6a81f07309c0 MATIC0.000076209
0x63364ce95c49951f5a7e688024874f138856b32f0a66f736abdc17e9c4cbc37dPair90185092021-01-01 2:43:20289 days 12 hrs agoSwapMatic: Deployer IN  0xd1f9ded8849a87ae404fb9d885e7f6a81f07309c0 MATIC0.000028564
0xe8a655fb1d5d3c37415efabc3fb70d6fdb52a8f03d760ee669121c5f532ff1eeExit90173622021-01-01 2:03:54289 days 13 hrs agoSwapMatic: Deployer IN  0xd1f9ded8849a87ae404fb9d885e7f6a81f07309c0 MATIC0.000076197
0x558bce5cbbf4fe8a157f72a0956b4f9872a7f44284dd9802172add830aedd353Exit90172292021-01-01 1:59:20289 days 13 hrs agoSwapMatic: Deployer IN  0xd1f9ded8849a87ae404fb9d885e7f6a81f07309c0 MATIC0.000076214
0x5022acfdac4d2dd426ee0239d7c2d7a3bb7e42ce980fb187c72f61be66c44520Exit90171202021-01-01 1:55:34289 days 13 hrs agoSwapMatic: Deployer IN  0xd1f9ded8849a87ae404fb9d885e7f6a81f07309c0 MATIC0.000076137
0xe751bdf5b5d77d26ad5b3a75968ba984cd6110d927929a4438621c2f5d97afdcPair89742672020-12-31 0:48:20290 days 14 hrs agoSwapMatic: Deployer IN  0xd1f9ded8849a87ae404fb9d885e7f6a81f07309c0 MATIC0.000043564
0xf14037d8fcd49a00cad13ff4d22595eeafc6fa625ed25e003be933d98808af33Add Validator89738912020-12-31 0:35:28290 days 15 hrs agoSwapMatic: Deployer IN  0xd1f9ded8849a87ae404fb9d885e7f6a81f07309c0 MATIC0.000064356
0x2493bc2948ee8bcb2e038916fa5b6aba137403688a82525172b6a5ffeeb7f4930x6080604089736892020-12-31 0:28:28290 days 15 hrs agoSwapMatic: Deployer IN  Contract Creation0 MATIC0.001224749
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ERC20Portal

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at polygonscan.com on 2021-06-30
*/

pragma solidity ^0.4.24;

// File: contracts/SignatureUtils.sol

/// @title A library of utilities for (multi)signatures
/// @author Alexander Kern <[email protected]>
/// @dev This library can be linked to another Solidity contract to expose signature manipulation functions.
contract SignatureUtils {

    /// @notice Converts a bytes32 to an signed message hash.
    /// @param _msg The bytes32 message (i.e. keccak256 result) to encrypt
    function toEthBytes32SignedMessageHash(
        bytes32 _msg
    )
        pure
        public
        returns (bytes32 signHash)
    {
        signHash = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", _msg));
    }

    /// @notice Converts a byte array to a personal signed message hash (result of `web3.personal.sign(...)`) by concatenating its length.
    /// @param _msg The bytes array to encrypt
    function toEthPersonalSignedMessageHash(
        bytes _msg
    )
        pure
        public
        returns (bytes32 signHash)
    {
        signHash = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", uintToString(_msg.length), _msg));
    }

    /// @notice Converts a uint to its decimal string representation.
    /// @param v The uint to convert
    function uintToString(
        uint v
    )
        pure
        public
        returns (string)
    {
        uint w = v;
        bytes32 x;
        if (v == 0) {
            x = "0";
        } else {
            while (w > 0) {
                x = bytes32(uint(x) / (2 ** 8));
                x |= bytes32(((w % 10) + 48) * 2 ** (8 * 31));
                w /= 10;
            }
        }

        bytes memory bytesString = new bytes(32);
        uint charCount = 0;
        for (uint j = 0; j < 32; j++) {
            byte char = byte(bytes32(uint(x) * 2 ** (8 * j)));
            if (char != 0) {
                bytesString[charCount] = char;
                charCount++;
            }
        }
        bytes memory resultBytes = new bytes(charCount);
        for (j = 0; j < charCount; j++) {
            resultBytes[j] = bytesString[j];
        }

        return string(resultBytes);
    }

    /// @notice Extracts the r, s, and v parameters to `ecrecover(...)` from the signature at position `_pos` in a densely packed signatures bytes array.
    /// @dev Based on [OpenZeppelin's ECRecovery](https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ECRecovery.sol)
    /// @param _signatures The signatures bytes array
    /// @param _pos The position of the signature in the bytes array (0 indexed)
    function parseSignature(
        bytes _signatures,
        uint _pos
    )
        pure
        public
        returns (uint8 v, bytes32 r, bytes32 s)
    {
        uint offset = _pos * 65;
        // The signature format is a compact form of:
        //   {bytes32 r}{bytes32 s}{uint8 v}
        // Compact means, uint8 is not padded to 32 bytes.
        assembly { // solium-disable-line security/no-inline-assembly
            r := mload(add(_signatures, add(32, offset)))
            s := mload(add(_signatures, add(64, offset)))
            // Here we are loading the last 32 bytes, including 31 bytes
            // of 's'. There is no 'mload8' to do this.
            //
            // 'byte' is not working due to the Solidity parser, so lets
            // use the second best option, 'and'
            v := and(mload(add(_signatures, add(65, offset))), 0xff)
        }

        if (v < 27) v += 27;

        require(v == 27 || v == 28);
    }

    /// @notice Counts the number of signatures in a signatures bytes array. Returns 0 if the length is invalid.
    /// @param _signatures The signatures bytes array
    /// @dev Signatures are 65 bytes long and are densely packed.
    function countSignatures(
        bytes _signatures
    )
        pure
        public
        returns (uint)
    {
        return _signatures.length % 65 == 0 ? _signatures.length / 65 : 0;
    }

    /// @notice Recovers an address using a message hash and a signature in a bytes array.
    /// @param _hash The signed message hash
    /// @param _signatures The signatures bytes array
    /// @param _pos The signature's position in the bytes array (0 indexed)
    function recoverAddress(
        bytes32 _hash,
        bytes _signatures,
        uint _pos
    )
        pure
        public
        returns (address)
    {
        uint8 v;
        bytes32 r;
        bytes32 s;
        (v, r, s) = parseSignature(_signatures, _pos);
        return ecrecover(_hash, v, r, s);
    }

    /// @notice Recovers an array of addresses using a message hash and a signatures bytes array.
    /// @param _hash The signed message hash
    /// @param _signatures The signatures bytes array
    function recoverAddresses(
        bytes32 _hash,
        bytes _signatures
    )
        pure
        public
        returns (address[] addresses)
    {
        uint8 v;
        bytes32 r;
        bytes32 s;
        uint count = countSignatures(_signatures);
        addresses = new address[](count);
        for (uint i = 0; i < count; i++) {
            (v, r, s) = parseSignature(_signatures, i);
            addresses[i] = ecrecover(_hash, v, r, s);
        }
    }

}

// File: openzeppelin-solidity/contracts/ownership/Ownable.sol

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipRenounced(address indexed previousOwner);
  event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
  );


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() public {
    owner = msg.sender;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  /**
   * @dev Allows the current owner to relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function transferOwnership(address _newOwner) public onlyOwner {
    _transferOwnership(_newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address _newOwner) internal {
    require(_newOwner != address(0));
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }
}

// File: contracts/BasePortal.sol

contract BasePortal is SignatureUtils, Ownable {
    address[] public validators;
    address public foreignContract;
    mapping (bytes32 => bool) foreignTransactions;

    event EnterBridgeEvent(address from, uint256 amount);
    event ExitBridgeEvent(address sender, uint256 amount);
    event Mint(address indexed to, uint256 amount);
    event Burn(address indexed burner, uint256 value);
    
    function addValidator(address _validator) public onlyOwner {
        validators.push(_validator);
    }

    function pair(address _foreignContract) public onlyOwner {
        foreignContract = _foreignContract;
    }

    function verifyValidators(address[] recovered) internal view returns (bool) {
        require(recovered.length == validators.length, "Invalid number of signatures");
        for(uint i = 0 ; i < validators.length; i++) {
            if(validators[i] != recovered[i]) {
                return false;
            }
        }
        return true;
    }

    function containsTransaction(bytes32 _txnHash) internal view returns (bool){
        return foreignTransactions[_txnHash];
    }

    /**
     * @notice Hash (keccak256) of the payload used by deposit
     * @param _contractAddress the target ERC20 address
     * @param _amount the original minter
     */
    function entranceHash(bytes32 txnHash, address _contractAddress, uint256 _amount) public view returns (bytes32) {
        // "0x8177cf3c": entranceHash(bytes32, address,uint256)
        return keccak256(abi.encode( bytes4(0x8177cf3c), msg.sender, txnHash, _contractAddress, _amount));
    }

}

// File: contracts/ERC20Interface.sol

// ----------------------------------------------------------------------------
// ERC Token Standard #20 Interface
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
// ----------------------------------------------------------------------------
contract ERC20Interface {
    function totalSupply() public constant returns (uint);
    function balanceOf(address tokenOwner) public constant returns (uint balance);
    function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
    function transfer(address to, uint tokens) public returns (bool success);
    function approve(address spender, uint tokens) public returns (bool success);
    function transferFrom(address from, address to, uint tokens) public returns (bool success);

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}

// File: contracts/ERC20Portal.sol

contract ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 tokens, address token, bytes data) public;
}

contract ERC20Portal is BasePortal {

    address public tokenAddress;

    // don't accept any Ether
    function () public payable {
        revert();
    }

    constructor(address _tokenAddress) public {
        tokenAddress = _tokenAddress;
    }

    // single step option for tokens that have implemented approveAndCall
    function receiveApproval(address from, uint256 tokens, address token, bytes data) public {
        require(tokens > 0, "Value must be greater than 0");
        require(tokenAddress == token, "Target Token Address is invalid.");
        require(ERC20Interface(token).transferFrom(from, address(this), tokens), "Could not transfer tokens");
        emit EnterBridgeEvent(from, tokens);
    }
    
    // two step operation that requires a previous call to approve
    function enter(uint _amount) public {
        receiveApproval(msg.sender, _amount, tokenAddress, "");
    }
    
    function exit(bytes32 _txnHash, address _foreignContract, uint256 _amount, bytes _signatures) public {
    	require(containsTransaction(_txnHash) == false, 'Foreign transaction has already been processed');
        require(_foreignContract == foreignContract, "Invalid contract target.");
        bytes32 hash = toEthBytes32SignedMessageHash(entranceHash(_txnHash,_foreignContract, _amount));
        address[] memory recovered = recoverAddresses(hash, _signatures);
        require(verifyValidators(recovered), "Validator verification failed.");
        foreignTransactions[_txnHash] = true;
        require(ERC20Interface(tokenAddress).transfer(msg.sender, _amount), "Could not transfer tokens");
        emit ExitBridgeEvent(msg.sender, _amount);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_hash","type":"bytes32"},{"name":"_signatures","type":"bytes"},{"name":"_pos","type":"uint256"}],"name":"recoverAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_signatures","type":"bytes"}],"name":"countSignatures","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"validators","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_validator","type":"address"}],"name":"addValidator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_foreignContract","type":"address"}],"name":"pair","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"txnHash","type":"bytes32"},{"name":"_contractAddress","type":"address"},{"name":"_amount","type":"uint256"}],"name":"entranceHash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"tokens","type":"uint256"},{"name":"token","type":"address"},{"name":"data","type":"bytes"}],"name":"receiveApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"enter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"foreignContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_signatures","type":"bytes"},{"name":"_pos","type":"uint256"}],"name":"parseSignature","outputs":[{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_msg","type":"bytes"}],"name":"toEthPersonalSignedMessageHash","outputs":[{"name":"signHash","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_msg","type":"bytes32"}],"name":"toEthBytes32SignedMessageHash","outputs":[{"name":"signHash","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_txnHash","type":"bytes32"},{"name":"_foreignContract","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_signatures","type":"bytes"}],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"v","type":"uint256"}],"name":"uintToString","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_hash","type":"bytes32"},{"name":"_signatures","type":"bytes"}],"name":"recoverAddresses","outputs":[{"name":"addresses","type":"address[]"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_tokenAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"EnterBridgeEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"ExitBridgeEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"burner","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

608060405234801561001057600080fd5b506040516020806114d3833981016040525160008054600160a060020a0319908116331790915560048054600160a060020a03909316929091169190911790556114748061005f6000396000f3006080604052600436106101065763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416631c2a15b8811461010b57806333ae3ad01461018757806335aa2e44146101f25780634d238c8e1461020a578063715018a61461022d5780637fb992f7146102425780638177cf3c146102635780638da5cb5b1461028a5780638f4ffcb11461029f5780639d76ea581461030f578063a59f3e0c14610324578063abd4d7161461033c578063b31d63cc14610351578063d8a40f6b146103ce578063e5990d2014610427578063e6bce1ae1461043f578063e9395679146104ae578063f0c8e9691461053b578063f2fde38b146105e9575b600080fd5b34801561011757600080fd5b5060408051602060046024803582810135601f810185900485028601850190965285855261016b958335953695604494919390910191908190840183828082843750949750509335945061060a9350505050565b60408051600160a060020a039092168252519081900360200190f35b34801561019357600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101e09436949293602493928401919081908401838280828437509497506106939650505050505050565b60408051918252519081900360200190f35b3480156101fe57600080fd5b5061016b6004356106b5565b34801561021657600080fd5b5061022b600160a060020a03600435166106dd565b005b34801561023957600080fd5b5061022b610752565b34801561024e57600080fd5b5061022b600160a060020a03600435166107be565b34801561026f57600080fd5b506101e0600435600160a060020a0360243516604435610804565b34801561029657600080fd5b5061016b6108cb565b3480156102ab57600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261022b94600160a060020a038135811695602480359660443590931695369560849492019181908401838280828437509497506108da9650505050505050565b34801561031b57600080fd5b5061016b610ad5565b34801561033057600080fd5b5061022b600435610ae4565b34801561034857600080fd5b5061016b610b10565b34801561035d57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526103ac9436949293602493928401919081908401838280828437509497505093359450610b1f9350505050565b6040805160ff9094168452602084019290925282820152519081900360600190f35b3480156103da57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526101e0943694929360249392840191908190840183828082843750949750610b739650505050505050565b34801561043357600080fd5b506101e0600435610cb8565b34801561044b57600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261022b94803594600160a060020a036024803591909116956044359536956084949301918190840183828082843750949750610d2f9650505050505050565b3480156104ba57600080fd5b506104c6600435610fea565b6040805160208082528351818301528351919283929083019185019080838360005b838110156105005781810151838201526020016104e8565b50505050905090810190601f16801561052d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561054757600080fd5b5060408051602060046024803582810135601f81018590048502860185019096528585526105999583359536956044949193909101919081908401838280828437509497506111c59650505050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105d55781810151838201526020016105bd565b505050509050019250505060405180910390f35b3480156105f557600080fd5b5061022b600160a060020a03600435166112c3565b60008060008061061a8686610b1f565b60408051600080825260208083018085528e905260ff8716838501526060830186905260808301859052925195985093965091945060019360a0808401949293601f19830193908390039091019190865af115801561067d573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b805160009060419006156106a85760006106af565b8151604190045b92915050565b60018054829081106106c357fe5b600091825260209091200154600160a060020a0316905081565b600054600160a060020a031633146106f457600080fd5b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600054600160a060020a0316331461076957600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600054600160a060020a031633146107d557600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b604080517f8177cf3c00000000000000000000000000000000000000000000000000000000602080830191909152338284015260608201869052600160a060020a038516608083015260a08083018590528351808403909101815260c0909201928390528151600093918291908401908083835b602083106108975780518252601f199092019160209182019101610878565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120979650505050505050565b600054600160a060020a031681565b60008311610932576040805160e560020a62461bcd02815260206004820152601c60248201527f56616c7565206d7573742062652067726561746572207468616e203000000000604482015290519081900360640190fd5b600454600160a060020a03838116911614610997576040805160e560020a62461bcd02815260206004820181905260248201527f54617267657420546f6b656e204164647265737320697320696e76616c69642e604482015290519081900360640190fd5b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152306024830152604482018690529151918416916323b872dd916064808201926020929091908290030181600087803b158015610a0957600080fd5b505af1158015610a1d573d6000803e3d6000fd5b505050506040513d6020811015610a3357600080fd5b50511515610a8b576040805160e560020a62461bcd02815260206004820152601960248201527f436f756c64206e6f74207472616e7366657220746f6b656e7300000000000000604482015290519081900360640190fd5b60408051600160a060020a03861681526020810185905281517fc6b9e46d1489b207d3057f60c8ac6b283467391239ee8e388c1583c20418f36d929181900390910190a150505050565b600454600160a060020a031681565b600454604080516020810190915260008152610b0d9133918491600160a060020a0316906108da565b50565b600254600160a060020a031681565b604180820283810160208101516040820151919093015160ff169291601b841015610b4b57601b840193505b8360ff16601b1480610b6057508360ff16601c145b1515610b6b57600080fd5b509250925092565b6000610b7f8251610fea565b8260405160200180807f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250601a0183805190602001908083835b60208310610bda5780518252601f199092019160209182019101610bbb565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310610c225780518252601f199092019160209182019101610c03565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040526040518082805190602001908083835b60208310610c865780518252601f199092019160209182019101610c67565b5181516020939093036101000a6000190180199091169216919091179052604051920182900390912095945050505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c80830185905283518084039091018152605c9092019283905281516000939182919084019080838360208310610c865780518252601f199092019160209182019101610c67565b60006060610d3c866112e3565b15610db7576040805160e560020a62461bcd02815260206004820152602e60248201527f466f726569676e207472616e73616374696f6e2068617320616c72656164792060448201527f6265656e2070726f636573736564000000000000000000000000000000000000606482015290519081900360840190fd5b600254600160a060020a03868116911614610e1c576040805160e560020a62461bcd02815260206004820152601860248201527f496e76616c696420636f6e7472616374207461726765742e0000000000000000604482015290519081900360640190fd5b610e2f610e2a878787610804565b610cb8565b9150610e3b82846111c5565b9050610e46816112f8565b1515610e9c576040805160e560020a62461bcd02815260206004820152601e60248201527f56616c696461746f7220766572696669636174696f6e206661696c65642e0000604482015290519081900360640190fd5b6000868152600360209081526040808320805460ff191660011790556004805482517fa9059cbb0000000000000000000000000000000000000000000000000000000081523392810192909252602482018990529151600160a060020a039092169363a9059cbb9360448084019491939192918390030190829087803b158015610f2557600080fd5b505af1158015610f39573d6000803e3d6000fd5b505050506040513d6020811015610f4f57600080fd5b50511515610fa7576040805160e560020a62461bcd02815260206004820152601960248201527f436f756c64206e6f74207472616e7366657220746f6b656e7300000000000000604482015290519081900360640190fd5b604080513381526020810186905281517f8fc406a425362a34b826c493c710d249c4006ec0fde54cebe73112447567b1a1929181900390910190a1505050505050565b60608160008281808083861515611023577f3000000000000000000000000000000000000000000000000000000000000000955061105b565b600087111561105b5761010086049550600a870660300160f860020a0260010286179550600a8781151561105357fe5b049650611023565b604080516020808252818301909252908082016104008038833901905050945060009350600092505b6020831015611111576008830260020a860291507fff00000000000000000000000000000000000000000000000000000000000000821615611106578185858151811015156110cf57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001909301925b600190920191611084565b836040519080825280601f01601f19166020018201604052801561113f578160200160208202803883390190505b509050600092505b838310156111b957848381518110151561115d57fe5b90602001015160f860020a900460f860020a02818481518110151561117e57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600190920191611147565b98975050505050505050565b606060008060008060006111d887610693565b915081604051908082528060200260200182016040528015611204578160200160208202803883390190505b509550600090505b818110156112b85761121e8782610b1f565b60408051600080825260208083018085528f905260ff87168385015260608301869052608083018590529251959a5093985091965060019360a0808401949293601f19830193908390039091019190865af1158015611281573d6000803e3d6000fd5b50505060206040510351868281518110151561129957fe5b600160a060020a0390921660209283029091019091015260010161120c565b505050505092915050565b600054600160a060020a031633146112da57600080fd5b610b0d816113cb565b60009081526003602052604090205460ff1690565b6001548151600091829114611357576040805160e560020a62461bcd02815260206004820152601c60248201527f496e76616c6964206e756d626572206f66207369676e61747572657300000000604482015290519081900360640190fd5b5060005b6001548110156113c057828181518110151561137357fe5b90602001906020020151600160a060020a031660018281548110151561139557fe5b600091825260209091200154600160a060020a0316146113b857600091506113c5565b60010161135b565b600191505b50919050565b600160a060020a03811615156113e057600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790555600a165627a7a72305820a1c2c87c60b43b82ea711c176bab04047342a6228326b029d8bf10e5624136cb0029000000000000000000000000820fe232433248732749c039ebca0d43588ad06d

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000820fe232433248732749c039ebca0d43588ad06d

-----Decoded View---------------
Arg [0] : _tokenAddress (address): 0x820fe232433248732749c039ebca0d43588ad06d

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000820fe232433248732749c039ebca0d43588ad06d


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.