Source Code
Latest 6 from a total of 6 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Cooperative Clos... | 4652619 | 3017 days ago | IN | 0 ETH | 0.00008478 | ||||
| Cooperative Clos... | 4652315 | 3017 days ago | IN | 0 ETH | 0.00199988 | ||||
| Cooperative Clos... | 4652276 | 3017 days ago | IN | 0 ETH | 0.00169826 | ||||
| Cooperative Clos... | 4652219 | 3017 days ago | IN | 0 ETH | 0.00016986 | ||||
| Cooperative Clos... | 4652150 | 3017 days ago | IN | 0 ETH | 0.00008491 | ||||
| Cooperative Clos... | 4652084 | 3017 days ago | IN | 0 ETH | 0.00009999 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
RaidenMicroTransferChannels
Compiler Version
v0.4.17+commit.bdeb9e52
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2017-11-30
*/
pragma solidity ^0.4.17;
library ECVerify {
function ecverify(bytes32 hash, bytes signature) internal pure returns (address signature_address) {
require(signature.length == 65);
bytes32 r;
bytes32 s;
uint8 v;
// The signature format is a compact form of:
// {bytes32 r}{bytes32 s}{uint8 v}
// Compact means, uint8 is not padded to 32 bytes.
assembly {
r := mload(add(signature, 32))
s := mload(add(signature, 64))
// Here we are loading the last 32 bytes, including 31 bytes of 's'.
v := byte(0, mload(add(signature, 96)))
}
// Version of signature should be 27 or 28, but 0 and 1 are also possible
if (v < 27) {
v += 27;
}
require(v == 27 || v == 28);
signature_address = ecrecover(hash, v, r, s);
// ecrecover returns zero on error
require(signature_address != 0x0);
return signature_address;
}
}
/// @title Base Token contract - Functions to be implemented by token contracts.
contract Token {
/*
* Implements ERC 20 standard.
* https://github.com/ethereum/EIPs/blob/f90864a3d2b2b45c4decf95efd26b3f0c276051a/EIPS/eip-20-token-standard.md
* https://github.com/ethereum/EIPs/issues/20
*
* Added support for the ERC 223 "tokenFallback" method in a "transfer" function with a payload.
* https://github.com/ethereum/EIPs/issues/223
*/
/*
* This is a slight change to the ERC20 base standard.
* function totalSupply() constant returns (uint256 supply);
* is replaced with:
* uint256 public totalSupply;
* This automatically creates a getter function for the totalSupply.
* This is moved to the base contract since public getter functions are not
* currently recognised as an implementation of the matching abstract
* function by the compiler.
*/
uint256 public totalSupply;
/*
* NOTE:
* The following variables were optional. Now, they are included in ERC 223 interface.
* They allow one to customise the token contract & in no way influences the core functionality.
*/
string public name; //fancy name: eg Simon Bucks
uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether.
string public symbol; //An identifier: eg SBX
/// @param _owner The address from which the balance will be retrieved.
/// @return The balance.
function balanceOf(address _owner) public constant returns (uint256 balance);
/// @notice send `_value` token to `_to` from `msg.sender`.
/// @param _to The address of the recipient.
/// @param _value The amount of token to be transferred.
/// @param _data Data to be sent to `tokenFallback.
/// @return Returns success of function call.
function transfer(address _to, uint256 _value, bytes _data) public returns (bool success);
/// @notice send `_value` token to `_to` from `msg.sender`.
/// @param _to The address of the recipient.
/// @param _value The amount of token to be transferred.
/// @return Whether the transfer was successful or not.
function transfer(address _to, uint256 _value) public returns (bool success);
/// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`.
/// @param _from The address of the sender.
/// @param _to The address of the recipient.
/// @param _value The amount of token to be transferred.
/// @return Whether the transfer was successful or not.
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
/// @notice `msg.sender` approves `_spender` to spend `_value` tokens.
/// @param _spender The address of the account able to transfer the tokens.
/// @param _value The amount of tokens to be approved for transfer.
/// @return Whether the approval was successful or not.
function approve(address _spender, uint256 _value) public returns (bool success);
/// @param _owner The address of the account owning tokens.
/// @param _spender The address of the account able to transfer the tokens.
/// @return Amount of remaining tokens allowed to spent.
function allowance(address _owner, address _spender) public constant returns (uint256 remaining);
/*
* Events
*/
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
// There is no ERC223 compatible Transfer event, with `_data` included.
}
/// @title Raiden MicroTransfer Channels Contract.
contract RaidenMicroTransferChannels {
/*
* Data structures
*/
uint32 public challenge_period;
// Contract semantic version
string public constant version = '0.1.0';
// We temporarily limit total token deposits in a channel to 100 tokens with 18 decimals.
// This was calculated just for RDN with its current (as of 30/11/2017) price and should
// not be considered to be the same for other tokens.
// This is just for the bug bounty release, as a safety measure.
uint256 public constant channel_deposit_bugbounty_limit = 10 ** 18 * 100;
Token public token;
mapping (bytes32 => Channel) public channels;
mapping (bytes32 => ClosingRequest) public closing_requests;
// 28 (deposit) + 4 (block no settlement)
struct Channel {
// uint192 is the maximum uint size needed for deposit based on a
// 10^8 * 10^18 token totalSupply.
uint192 deposit;
// Used in creating a unique identifier for the channel between a sender and receiver.
// Supports creation of multiple channels between the 2 parties and prevents
// replay of messages in later channels.
uint32 open_block_number;
}
struct ClosingRequest {
uint192 closing_balance;
uint32 settle_block_number;
}
/*
* Events
*/
event ChannelCreated(
address indexed _sender,
address indexed _receiver,
uint192 _deposit);
event ChannelToppedUp (
address indexed _sender,
address indexed _receiver,
uint32 indexed _open_block_number,
uint192 _added_deposit);
event ChannelCloseRequested(
address indexed _sender,
address indexed _receiver,
uint32 indexed _open_block_number,
uint192 _balance);
event ChannelSettled(
address indexed _sender,
address indexed _receiver,
uint32 indexed _open_block_number,
uint192 _balance);
/*
* Constructor
*/
/// @dev Constructor for creating the uRaiden microtransfer channels contract.
/// @param _token_address The address of the Token used by the uRaiden contract.
/// @param _challenge_period A fixed number of blocks representing the challenge period.
/// We enforce a minimum of 500 blocks waiting period.
/// after a sender requests the closing of the channel without the receiver's signature.
function RaidenMicroTransferChannels(address _token_address, uint32 _challenge_period) public {
require(_token_address != 0x0);
require(addressHasCode(_token_address));
require(_challenge_period >= 500);
token = Token(_token_address);
// Check if the contract is indeed a token contract
require(token.totalSupply() > 0);
challenge_period = _challenge_period;
}
/*
* Public helper functions (constant)
*/
/// @dev Returns the unique channel identifier used in the contract.
/// @param _sender_address The address that sends tokens.
/// @param _receiver_address The address that receives tokens.
/// @param _open_block_number The block number at which a channel between the
/// sender and receiver was created.
/// @return Unique channel identifier.
function getKey(
address _sender_address,
address _receiver_address,
uint32 _open_block_number)
public
pure
returns (bytes32 data)
{
return keccak256(_sender_address, _receiver_address, _open_block_number);
}
/// @dev Returns the sender address extracted from the balance proof.
/// Works with eth_signTypedData https://github.com/ethereum/EIPs/pull/712.
/// @param _receiver_address The address that receives tokens.
/// @param _open_block_number The block number at which a channel between the
/// sender and receiver was created.
/// @param _balance The amount of tokens owed by the sender to the receiver.
/// @param _balance_msg_sig The balance message signed by the sender.
/// @return Address of the balance proof signer.
function verifyBalanceProof(
address _receiver_address,
uint32 _open_block_number,
uint192 _balance,
bytes _balance_msg_sig)
public
view
returns (address)
{
// The variable names from below will be shown to the sender when signing
// the balance proof, so they have to be kept in sync with the Dapp client.
// The hashed strings should be kept in sync with this function's parameters
// (variable names and types).
// ! Note that EIP712 might change how hashing is done, triggering a
// new contract deployment with updated code.
bytes32 message_hash = keccak256(
keccak256('address receiver', 'uint32 block_created', 'uint192 balance', 'address contract'),
keccak256(_receiver_address, _open_block_number, _balance, address(this))
);
// Derive address from signature
address signer = ECVerify.ecverify(message_hash, _balance_msg_sig);
return signer;
}
/*
* External functions
*/
/// @dev Opens a new channel or tops up an existing one, compatibility with ERC 223;
/// msg.sender is Token contract.
/// @param _sender_address The address that sends the tokens.
/// @param _deposit The amount of tokens that the sender escrows.
/// @param _data Receiver address in bytes.
function tokenFallback(address _sender_address, uint256 _deposit, bytes _data) external {
// Make sure we trust the token
require(msg.sender == address(token));
uint192 deposit = uint192(_deposit);
require(deposit == _deposit);
uint length = _data.length;
// createChannel - receiver address (20 bytes)
// topUp - receiver address (20 bytes) + open_block_number (4 bytes) = 24 bytes
require(length == 20 || length == 24);
address receiver = addressFromData(_data);
if(length == 20) {
createChannelPrivate(_sender_address, receiver, deposit);
} else {
uint32 open_block_number = blockNumberFromData(_data);
updateInternalBalanceStructs(
_sender_address,
receiver,
open_block_number,
deposit
);
}
}
/// @dev Creates a new channel between a sender and a receiver and transfers
/// the sender's token deposit to this contract, compatibility with ERC20 tokens.
/// @param _receiver_address The address that receives tokens.
/// @param _deposit The amount of tokens that the sender escrows.
function createChannelERC20(address _receiver_address, uint192 _deposit) external {
createChannelPrivate(msg.sender, _receiver_address, _deposit);
// transferFrom deposit from sender to contract
// ! needs prior approval from user
require(token.transferFrom(msg.sender, address(this), _deposit));
}
/// @dev Increase the sender's current deposit.
/// @param _receiver_address The address that receives tokens.
/// @param _open_block_number The block number at which a channel between the
/// sender and receiver was created.
/// @param _added_deposit The added token deposit with which the current deposit is increased.
function topUpERC20(
address _receiver_address,
uint32 _open_block_number,
uint192 _added_deposit)
external
{
updateInternalBalanceStructs(
msg.sender,
_receiver_address,
_open_block_number,
_added_deposit
);
// transferFrom deposit from msg.sender to contract
// ! needs prior approval from user
// Do transfer after any state change
require(token.transferFrom(msg.sender, address(this), _added_deposit));
}
/// @dev Function called when any of the parties wants to close the channel and settle;
/// receiver needs a balance proof to immediately settle, sender triggers a challenge period.
/// @param _receiver_address The address that receives tokens.
/// @param _open_block_number The block number at which a channel between the
/// sender and receiver was created.
/// @param _balance The amount of tokens owed by the sender to the receiver.
/// @param _balance_msg_sig The balance message signed by the sender.
function uncooperativeClose(
address _receiver_address,
uint32 _open_block_number,
uint192 _balance,
bytes _balance_msg_sig)
external
{
address sender = verifyBalanceProof(_receiver_address, _open_block_number, _balance, _balance_msg_sig);
if(msg.sender == _receiver_address) {
settleChannel(sender, _receiver_address, _open_block_number, _balance);
} else {
require(msg.sender == sender);
initChallengePeriod(_receiver_address, _open_block_number, _balance);
}
}
/// @dev Function called by the sender, when he has a closing signature from the receiver;
/// channel is closed immediately.
/// @param _receiver_address The address that receives tokens.
/// @param _open_block_number The block number at which a channel between the
/// sender and receiver was created.
/// @param _balance The amount of tokens owed by the sender to the receiver.
/// @param _balance_msg_sig The balance message signed by the sender.
/// @param _closing_sig The hash of the signed balance message, signed by the receiver.
function cooperativeClose(
address _receiver_address,
uint32 _open_block_number,
uint192 _balance,
bytes _balance_msg_sig,
bytes _closing_sig)
external
{
// Derive receiver address from signature
address receiver = ECVerify.ecverify(keccak256(_balance_msg_sig), _closing_sig);
require(receiver == _receiver_address);
// Derive sender address from signed balance proof
address sender = verifyBalanceProof(_receiver_address, _open_block_number, _balance, _balance_msg_sig);
require(msg.sender == sender);
settleChannel(sender, receiver, _open_block_number, _balance);
}
/// @dev Function for getting information about a channel.
/// @param _sender_address The address that sends tokens.
/// @param _receiver_address The address that receives tokens.
/// @param _open_block_number The block number at which a channel between the
/// sender and receiver was created.
/// @return Channel information (unique_identifier, deposit, settle_block_number, closing_balance).
function getChannelInfo(
address _sender_address,
address _receiver_address,
uint32 _open_block_number)
external
constant
returns (bytes32, uint192, uint32, uint192)
{
bytes32 key = getKey(_sender_address, _receiver_address, _open_block_number);
require(channels[key].open_block_number > 0);
return (
key,
channels[key].deposit,
closing_requests[key].settle_block_number,
closing_requests[key].closing_balance
);
}
/// @dev Function called by the sender after the challenge period has ended,
/// in case the receiver has not closed the channel.
/// @param _receiver_address The address that receives tokens.
/// @param _open_block_number The block number at which a channel between
/// the sender and receiver was created.
function settle(address _receiver_address, uint32 _open_block_number) external {
bytes32 key = getKey(msg.sender, _receiver_address, _open_block_number);
// Make sure an uncooperativeClose has been initiated
require(closing_requests[key].settle_block_number > 0);
// Make sure the challenge_period has ended
require(block.number > closing_requests[key].settle_block_number);
settleChannel(msg.sender, _receiver_address, _open_block_number,
closing_requests[key].closing_balance
);
}
/*
* Private functions
*/
/// @dev Creates a new channel between a sender and a receiver,
/// only callable by the Token contract.
/// @param _sender_address The address that sends tokens.
/// @param _receiver_address The address that receives tokens.
/// @param _deposit The amount of tokens that the sender escrows.
function createChannelPrivate(address _sender_address, address _receiver_address, uint192 _deposit) private {
require(_deposit <= channel_deposit_bugbounty_limit);
uint32 open_block_number = uint32(block.number);
// Create unique identifier from sender, receiver and current block number
bytes32 key = getKey(_sender_address, _receiver_address, open_block_number);
require(channels[key].deposit == 0);
require(channels[key].open_block_number == 0);
require(closing_requests[key].settle_block_number == 0);
// Store channel information
channels[key] = Channel({deposit: _deposit, open_block_number: open_block_number});
ChannelCreated(_sender_address, _receiver_address, _deposit);
}
/// @dev Updates internal balance Structures, only callable by the Token contract.
/// @param _sender_address The address that sends tokens.
/// @param _receiver_address The address that receives tokens.
/// @param _open_block_number The block number at which a channel between the
/// sender and receiver was created.
/// @param _added_deposit The added token deposit with which the current deposit is increased.
function updateInternalBalanceStructs(
address _sender_address,
address _receiver_address,
uint32 _open_block_number,
uint192 _added_deposit)
private
{
require(_added_deposit > 0);
require(_open_block_number > 0);
bytes32 key = getKey(_sender_address, _receiver_address, _open_block_number);
require(channels[key].deposit > 0);
require(closing_requests[key].settle_block_number == 0);
require(channels[key].deposit + _added_deposit <= channel_deposit_bugbounty_limit);
channels[key].deposit += _added_deposit;
assert(channels[key].deposit > _added_deposit);
ChannelToppedUp(_sender_address, _receiver_address, _open_block_number, _added_deposit);
}
/// @dev Sender starts the challenge period; this can only happen once.
/// @param _receiver_address The address that receives tokens.
/// @param _open_block_number The block number at which a channel between
/// the sender and receiver was created.
/// @param _balance The amount of tokens owed by the sender to the receiver.
function initChallengePeriod(
address _receiver_address,
uint32 _open_block_number,
uint192 _balance)
private
{
bytes32 key = getKey(msg.sender, _receiver_address, _open_block_number);
require(closing_requests[key].settle_block_number == 0);
require(_balance <= channels[key].deposit);
// Mark channel as closed
closing_requests[key].settle_block_number = uint32(block.number) + challenge_period;
closing_requests[key].closing_balance = _balance;
ChannelCloseRequested(msg.sender, _receiver_address, _open_block_number, _balance);
}
/// @dev Deletes the channel and settles by transfering the balance to the receiver
/// and the rest of the deposit back to the sender.
/// @param _sender_address The address that sends tokens.
/// @param _receiver_address The address that receives tokens.
/// @param _open_block_number The block number at which a channel between the
/// sender and receiver was created.
/// @param _balance The amount of tokens owed by the sender to the receiver.
function settleChannel(
address _sender_address,
address _receiver_address,
uint32 _open_block_number,
uint192 _balance)
private
{
bytes32 key = getKey(_sender_address, _receiver_address, _open_block_number);
Channel memory channel = channels[key];
require(channel.open_block_number > 0);
require(_balance <= channel.deposit);
// Remove closed channel structures
// channel.open_block_number will become 0
// Change state before transfer call
delete channels[key];
delete closing_requests[key];
// Send _balance to the receiver, as it is always <= deposit
require(token.transfer(_receiver_address, _balance));
// Send deposit - balance back to sender
require(token.transfer(_sender_address, channel.deposit - _balance));
ChannelSettled(_sender_address, _receiver_address, _open_block_number, _balance);
}
/*
* Internal functions
*/
/// @dev Internal function for getting an address from tokenFallback data bytes.
/// @param b Bytes received.
/// @return Address resulted.
function addressFromData (bytes b) internal pure returns (address) {
bytes20 addr;
assembly {
// Read address bytes
// Offset of 32 bytes, representing b.length
addr := mload(add(b, 0x20))
}
return address(addr);
}
/// @dev Internal function for getting the block number from tokenFallback data bytes.
/// @param b Bytes received.
/// @return Block number.
function blockNumberFromData(bytes b) internal pure returns (uint32) {
bytes4 block_number;
assembly {
// Read block number bytes
// Offset of 32 bytes (b.length) + 20 bytes (address)
block_number := mload(add(b, 0x34))
}
return uint32(block_number);
}
/// @notice Check if a contract exists
/// @param _contract The address of the contract to check for.
/// @return True if a contract exists, false otherwise
function addressHasCode(address _contract) internal constant returns (bool) {
uint size;
assembly {
size := extcodesize(_contract)
}
return size > 0;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[],"name":"challenge_period","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"}],"name":"getChannelInfo","outputs":[{"name":"","type":"bytes32"},{"name":"","type":"uint192"},{"name":"","type":"uint32"},{"name":"","type":"uint192"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"},{"name":"_balance","type":"uint192"},{"name":"_balance_msg_sig","type":"bytes"},{"name":"_closing_sig","type":"bytes"}],"name":"cooperativeClose","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_deposit","type":"uint192"}],"name":"createChannelERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"}],"name":"settle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"channel_deposit_bugbounty_limit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"},{"name":"_balance","type":"uint192"},{"name":"_balance_msg_sig","type":"bytes"}],"name":"verifyBalanceProof","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"closing_requests","outputs":[{"name":"closing_balance","type":"uint192"},{"name":"settle_block_number","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"channels","outputs":[{"name":"deposit","type":"uint192"},{"name":"open_block_number","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"}],"name":"getKey","outputs":[{"name":"data","type":"bytes32"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"},{"name":"_balance","type":"uint192"},{"name":"_balance_msg_sig","type":"bytes"}],"name":"uncooperativeClose","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sender_address","type":"address"},{"name":"_deposit","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"tokenFallback","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_receiver_address","type":"address"},{"name":"_open_block_number","type":"uint32"},{"name":"_added_deposit","type":"uint192"}],"name":"topUpERC20","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token_address","type":"address"},{"name":"_challenge_period","type":"uint32"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":true,"name":"_receiver","type":"address"},{"indexed":false,"name":"_deposit","type":"uint192"}],"name":"ChannelCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":true,"name":"_receiver","type":"address"},{"indexed":true,"name":"_open_block_number","type":"uint32"},{"indexed":false,"name":"_added_deposit","type":"uint192"}],"name":"ChannelToppedUp","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":true,"name":"_receiver","type":"address"},{"indexed":true,"name":"_open_block_number","type":"uint32"},{"indexed":false,"name":"_balance","type":"uint192"}],"name":"ChannelCloseRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_sender","type":"address"},{"indexed":true,"name":"_receiver","type":"address"},{"indexed":true,"name":"_open_block_number","type":"uint32"},{"indexed":false,"name":"_balance","type":"uint192"}],"name":"ChannelSettled","type":"event"}]Contract Creation Code
606060405234156200001057600080fd5b604051604080620024958339810160405280805190602001909190805190602001909190505060008273ffffffffffffffffffffffffffffffffffffffff16141515156200005d57600080fd5b6200007c82620001c26401000000000262002271176401000000009004565b15156200008857600080fd5b6101f48163ffffffff1610151515620000a057600080fd5b81600060046101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156200017157600080fd5b6102c65a03f115156200018357600080fd5b505050604051805190501115156200019a57600080fd5b806000806101000a81548163ffffffff021916908363ffffffff1602179055505050620001d5565b600080823b905060008111915050919050565b6122b080620001e56000396000f300606060405236156100d9576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630a00840c146100de5780630eba6b06146101135780631c6f609b1461021f57806354fd4d50146102b25780635989c283146103405780635a8e9d661461039c5780636108b5ff146103e45780636c68c8371461040d57806377c13323146104fb5780637a7ebd7b1461057d578063803c8383146105ff5780638df4893514610682578063c0ee0b8a14610701578063ce90bafa14610757578063fc0c546a146107c2575b600080fd5b34156100e957600080fd5b6100f1610817565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b341561011e57600080fd5b610178600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190505061082c565b6040518085600019166000191681526020018477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018363ffffffff1663ffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390f35b341561022a57600080fd5b6102b0600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190820180359060200191909192908035906020019082018035906020019190919290505061094c565b005b34156102bd57600080fd5b6102c5610a74565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103055780820151818401526020810190506102ea565b50505050905090810190601f1680156103325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561034b57600080fd5b61039a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091905050610aad565b005b34156103a757600080fd5b6103e2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff16906020019091905050610bfd565b005b34156103ef57600080fd5b6103f7610ce4565b6040518082815260200191505060405180910390f35b341561041857600080fd5b6104b9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610cf1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050657600080fd5b610520600480803560001916906020019091905050610ef9565b604051808377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018263ffffffff1663ffffffff1681526020019250505060405180910390f35b341561058857600080fd5b6105a2600480803560001916906020019091905050610f51565b604051808377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018263ffffffff1663ffffffff1681526020019250505060405180910390f35b341561060a57600080fd5b610664600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff16906020019091905050610fa9565b60405180826000191660001916815260200191505060405180910390f35b341561068d57600080fd5b6106ff600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019082018035906020019190919290505061107b565b005b341561070c57600080fd5b610755600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919080359060200190820180359060200191909192905050611150565b005b341561076257600080fd5b6107c0600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff169060200190919050506112a7565b005b34156107cd57600080fd5b6107d56113f9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000809054906101000a900463ffffffff1681565b600080600080600061083f888888610fa9565b9050600060016000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1611151561088457600080fd5b8060016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1660026000846000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1660026000856000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1694509450945094505093509350935093565b6000806109a7868660405180838380828437820191505092505050604051809103902085858080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505061141f565b91508873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415156109e357600080fd5b610a2189898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050610cf1565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a5d57600080fd5b610a6981838a8a61153b565b505050505050505050565b6040805190810160405280600581526020017f302e312e3000000000000000000000000000000000000000000000000000000081525081565b610ab83383836119ea565b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b1515610bd357600080fd5b6102c65a03f11515610be457600080fd5b505050604051805190501515610bf957600080fd5b5050565b6000610c0a338484610fa9565b9050600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16111515610c4f57600080fd5b60026000826000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1643111515610c9157600080fd5b610cdf33848460026000866000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1661153b565b505050565b68056bc75e2d6310000081565b600080600060405180807f6164647265737320726563656976657200000000000000000000000000000000815250601001807f75696e74333220626c6f636b5f63726561746564000000000000000000000000815250601401807f75696e743139322062616c616e63650000000000000000000000000000000000815250600f01807f6164647265737320636f6e7472616374000000000000000000000000000000008152506010019050604051809103902087878730604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018463ffffffff1663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16680100000000000000000281526018018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401945050505050604051809103902060405180836000191660001916815260200182600019166000191681526020019250505060405180910390209150610eea828561141f565b90508092505050949350505050565b60026020528060005260406000206000915090508060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff16908060000160189054906101000a900463ffffffff16905082565b60016020528060005260406000206000915090508060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff16908060000160189054906101000a900463ffffffff16905082565b6000838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018263ffffffff1663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004019350505050604051809103902090509392505050565b60006110bb86868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050610cf1565b90508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611102576110fd8187878761153b565b611148565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561113c57600080fd5b611147868686611c89565b5b505050505050565b600080600080600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111b257600080fd5b869350868477ffffffffffffffffffffffffffffffffffffffffffffffff161415156111dd57600080fd5b85859050925060148314806111f25750601883145b15156111fd57600080fd5b61123886868080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050611ebb565b915060148314156112535761124e8883866119ea565b61129d565b61128e86868080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050611ede565b905061129c88838387611f11565b5b5050505050505050565b6112b333848484611f11565b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15156113ce57600080fd5b6102c65a03f115156113df57600080fd5b5050506040518051905015156113f457600080fd5b505050565b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806041855114151561143557600080fd5b6020850151925060408501519150606085015160001a9050601b8160ff16101561146057601b810190505b601b8160ff1614806114755750601c8160ff16145b151561148057600080fd5b600186828585604051600081526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff16815260200183600019166000191681526020018260001916600019168152602001945050505050602060405160208103908084039060008661646e5a03f115156114fe57600080fd5b505060206040510351935060008473ffffffffffffffffffffffffffffffffffffffff161415151561152f57600080fd5b83935050505092915050565b6000611545612237565b611550868686610fa9565b91506001600083600019166000191681526020019081526020016000206040805190810160405290816000820160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020016000820160189054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000816020015163ffffffff1611151561161b57600080fd5b806000015177ffffffffffffffffffffffffffffffffffffffffffffffff168377ffffffffffffffffffffffffffffffffffffffffffffffff161115151561166257600080fd5b600160008360001916600019168152602001908152602001600020600080820160006101000a81549077ffffffffffffffffffffffffffffffffffffffffffffffff02191690556000820160186101000a81549063ffffffff02191690555050600260008360001916600019168152602001908152602001600020600080820160006101000a81549077ffffffffffffffffffffffffffffffffffffffffffffffff02191690556000820160186101000a81549063ffffffff02191690555050600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b151561180957600080fd5b6102c65a03f1151561181a57600080fd5b50505060405180519050151561182f57600080fd5b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87858460000151036000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b151561191c57600080fd5b6102c65a03f1151561192d57600080fd5b50505060405180519050151561194257600080fd5b8363ffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7fb158c552965b9b427aaef16f3a7129dc51eb0107dec41f4a3fdd82e948bccc86604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a4505050505050565b60008068056bc75e2d631000008377ffffffffffffffffffffffffffffffffffffffffffffffff1611151515611a1f57600080fd5b439150611a2d858584610fa9565b9050600060016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16141515611a9a57600080fd5b600060016000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16141515611add57600080fd5b600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16141515611b2057600080fd5b60408051908101604052808477ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018363ffffffff1681525060016000836000191660001916815260200190815260200160002060008201518160000160006101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160186101000a81548163ffffffff021916908363ffffffff1602179055509050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f986876e67d288f7b8bc5229976a1d5710be919feb66d2e1aec1bf3eadebba20785604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a35050505050565b6000611c96338585610fa9565b9050600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16141515611cdb57600080fd5b60016000826000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff168277ffffffffffffffffffffffffffffffffffffffffffffffff1611151515611d6057600080fd5b6000809054906101000a900463ffffffff16430160026000836000191660001916815260200190815260200160002060000160186101000a81548163ffffffff021916908363ffffffff1602179055508160026000836000191660001916815260200190815260200160002060000160006101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff1602179055508263ffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f960e55a871be40c817ffd64e2117c513e42f047ccfdcbc5454e68dfc65e9a9b085604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a450505050565b60008060208301519050806c010000000000000000000000009004915050919050565b60008060348301519050807c01000000000000000000000000000000000000000000000000000000009004915050919050565b6000808277ffffffffffffffffffffffffffffffffffffffffffffffff16111515611f3b57600080fd5b60008363ffffffff16111515611f5057600080fd5b611f5b858585610fa9565b9050600060016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16111515611fc857600080fd5b600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1614151561200b57600080fd5b68056bc75e2d631000008260016000846000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff160177ffffffffffffffffffffffffffffffffffffffffffffffff161115151561208157600080fd5b8160016000836000191660001916815260200190815260200160002060000160008282829054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff160192506101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff1602179055508177ffffffffffffffffffffffffffffffffffffffffffffffff1660016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1611151561219057fe5b8263ffffffff168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f283bcbed58779cdfe40c216a69673863430a43dbf7fe557730c0498890e5512685604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a45050505050565b6040805190810160405280600077ffffffffffffffffffffffffffffffffffffffffffffffff168152602001600063ffffffff1681525090565b600080823b9050600081119150509190505600a165627a7a72305820b5ead2751fee6002dbd1432c294d23a630a2257cb566a1d2a3c92d9ecd7f9cfe0029000000000000000000000000255aa6df07540cb5d3d297f0d0d4d84cb52bc8e600000000000000000000000000000000000000000000000000000000000021c0
Deployed Bytecode
0x606060405236156100d9576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630a00840c146100de5780630eba6b06146101135780631c6f609b1461021f57806354fd4d50146102b25780635989c283146103405780635a8e9d661461039c5780636108b5ff146103e45780636c68c8371461040d57806377c13323146104fb5780637a7ebd7b1461057d578063803c8383146105ff5780638df4893514610682578063c0ee0b8a14610701578063ce90bafa14610757578063fc0c546a146107c2575b600080fd5b34156100e957600080fd5b6100f1610817565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b341561011e57600080fd5b610178600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190505061082c565b6040518085600019166000191681526020018477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018363ffffffff1663ffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405180910390f35b341561022a57600080fd5b6102b0600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190820180359060200191909192908035906020019082018035906020019190919290505061094c565b005b34156102bd57600080fd5b6102c5610a74565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103055780820151818401526020810190506102ea565b50505050905090810190601f1680156103325780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561034b57600080fd5b61039a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091905050610aad565b005b34156103a757600080fd5b6103e2600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff16906020019091905050610bfd565b005b34156103ef57600080fd5b6103f7610ce4565b6040518082815260200191505060405180910390f35b341561041857600080fd5b6104b9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610cf1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561050657600080fd5b610520600480803560001916906020019091905050610ef9565b604051808377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018263ffffffff1663ffffffff1681526020019250505060405180910390f35b341561058857600080fd5b6105a2600480803560001916906020019091905050610f51565b604051808377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018263ffffffff1663ffffffff1681526020019250505060405180910390f35b341561060a57600080fd5b610664600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff16906020019091905050610fa9565b60405180826000191660001916815260200191505060405180910390f35b341561068d57600080fd5b6106ff600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019082018035906020019190919290505061107b565b005b341561070c57600080fd5b610755600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919080359060200190820180359060200191909192905050611150565b005b341561076257600080fd5b6107c0600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803563ffffffff1690602001909190803577ffffffffffffffffffffffffffffffffffffffffffffffff169060200190919050506112a7565b005b34156107cd57600080fd5b6107d56113f9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000809054906101000a900463ffffffff1681565b600080600080600061083f888888610fa9565b9050600060016000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1611151561088457600080fd5b8060016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1660026000846000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1660026000856000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1694509450945094505093509350935093565b6000806109a7868660405180838380828437820191505092505050604051809103902085858080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505061141f565b91508873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415156109e357600080fd5b610a2189898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050610cf1565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610a5d57600080fd5b610a6981838a8a61153b565b505050505050505050565b6040805190810160405280600581526020017f302e312e3000000000000000000000000000000000000000000000000000000081525081565b610ab83383836119ea565b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b1515610bd357600080fd5b6102c65a03f11515610be457600080fd5b505050604051805190501515610bf957600080fd5b5050565b6000610c0a338484610fa9565b9050600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16111515610c4f57600080fd5b60026000826000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1643111515610c9157600080fd5b610cdf33848460026000866000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1661153b565b505050565b68056bc75e2d6310000081565b600080600060405180807f6164647265737320726563656976657200000000000000000000000000000000815250601001807f75696e74333220626c6f636b5f63726561746564000000000000000000000000815250601401807f75696e743139322062616c616e63650000000000000000000000000000000000815250600f01807f6164647265737320636f6e7472616374000000000000000000000000000000008152506010019050604051809103902087878730604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018463ffffffff1663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018377ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16680100000000000000000281526018018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401945050505050604051809103902060405180836000191660001916815260200182600019166000191681526020019250505060405180910390209150610eea828561141f565b90508092505050949350505050565b60026020528060005260406000206000915090508060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff16908060000160189054906101000a900463ffffffff16905082565b60016020528060005260406000206000915090508060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff16908060000160189054906101000a900463ffffffff16905082565b6000838383604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018263ffffffff1663ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004019350505050604051809103902090509392505050565b60006110bb86868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050610cf1565b90508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611102576110fd8187878761153b565b611148565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561113c57600080fd5b611147868686611c89565b5b505050505050565b600080600080600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156111b257600080fd5b869350868477ffffffffffffffffffffffffffffffffffffffffffffffff161415156111dd57600080fd5b85859050925060148314806111f25750601883145b15156111fd57600080fd5b61123886868080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050611ebb565b915060148314156112535761124e8883866119ea565b61129d565b61128e86868080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050611ede565b905061129c88838387611f11565b5b5050505050505050565b6112b333848484611f11565b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15156113ce57600080fd5b6102c65a03f115156113df57600080fd5b5050506040518051905015156113f457600080fd5b505050565b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806041855114151561143557600080fd5b6020850151925060408501519150606085015160001a9050601b8160ff16101561146057601b810190505b601b8160ff1614806114755750601c8160ff16145b151561148057600080fd5b600186828585604051600081526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff16815260200183600019166000191681526020018260001916600019168152602001945050505050602060405160208103908084039060008661646e5a03f115156114fe57600080fd5b505060206040510351935060008473ffffffffffffffffffffffffffffffffffffffff161415151561152f57600080fd5b83935050505092915050565b6000611545612237565b611550868686610fa9565b91506001600083600019166000191681526020019081526020016000206040805190810160405290816000820160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1681526020016000820160189054906101000a900463ffffffff1663ffffffff1663ffffffff168152505090506000816020015163ffffffff1611151561161b57600080fd5b806000015177ffffffffffffffffffffffffffffffffffffffffffffffff168377ffffffffffffffffffffffffffffffffffffffffffffffff161115151561166257600080fd5b600160008360001916600019168152602001908152602001600020600080820160006101000a81549077ffffffffffffffffffffffffffffffffffffffffffffffff02191690556000820160186101000a81549063ffffffff02191690555050600260008360001916600019168152602001908152602001600020600080820160006101000a81549077ffffffffffffffffffffffffffffffffffffffffffffffff02191690556000820160186101000a81549063ffffffff02191690555050600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86856000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b151561180957600080fd5b6102c65a03f1151561181a57600080fd5b50505060405180519050151561182f57600080fd5b600060049054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87858460000151036000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018277ffffffffffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b151561191c57600080fd5b6102c65a03f1151561192d57600080fd5b50505060405180519050151561194257600080fd5b8363ffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7fb158c552965b9b427aaef16f3a7129dc51eb0107dec41f4a3fdd82e948bccc86604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a4505050505050565b60008068056bc75e2d631000008377ffffffffffffffffffffffffffffffffffffffffffffffff1611151515611a1f57600080fd5b439150611a2d858584610fa9565b9050600060016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16141515611a9a57600080fd5b600060016000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16141515611add57600080fd5b600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16141515611b2057600080fd5b60408051908101604052808477ffffffffffffffffffffffffffffffffffffffffffffffff1681526020018363ffffffff1681525060016000836000191660001916815260200190815260200160002060008201518160000160006101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160186101000a81548163ffffffff021916908363ffffffff1602179055509050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f986876e67d288f7b8bc5229976a1d5710be919feb66d2e1aec1bf3eadebba20785604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a35050505050565b6000611c96338585610fa9565b9050600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff16141515611cdb57600080fd5b60016000826000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff168277ffffffffffffffffffffffffffffffffffffffffffffffff1611151515611d6057600080fd5b6000809054906101000a900463ffffffff16430160026000836000191660001916815260200190815260200160002060000160186101000a81548163ffffffff021916908363ffffffff1602179055508160026000836000191660001916815260200190815260200160002060000160006101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff1602179055508263ffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f960e55a871be40c817ffd64e2117c513e42f047ccfdcbc5454e68dfc65e9a9b085604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a450505050565b60008060208301519050806c010000000000000000000000009004915050919050565b60008060348301519050807c01000000000000000000000000000000000000000000000000000000009004915050919050565b6000808277ffffffffffffffffffffffffffffffffffffffffffffffff16111515611f3b57600080fd5b60008363ffffffff16111515611f5057600080fd5b611f5b858585610fa9565b9050600060016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16111515611fc857600080fd5b600060026000836000191660001916815260200190815260200160002060000160189054906101000a900463ffffffff1663ffffffff1614151561200b57600080fd5b68056bc75e2d631000008260016000846000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff160177ffffffffffffffffffffffffffffffffffffffffffffffff161115151561208157600080fd5b8160016000836000191660001916815260200190815260200160002060000160008282829054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff160192506101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff1602179055508177ffffffffffffffffffffffffffffffffffffffffffffffff1660016000836000191660001916815260200190815260200160002060000160009054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1611151561219057fe5b8263ffffffff168473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f283bcbed58779cdfe40c216a69673863430a43dbf7fe557730c0498890e5512685604051808277ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a45050505050565b6040805190810160405280600077ffffffffffffffffffffffffffffffffffffffffffffffff168152602001600063ffffffff1681525090565b600080823b9050600081119150509190505600a165627a7a72305820b5ead2751fee6002dbd1432c294d23a630a2257cb566a1d2a3c92d9ecd7f9cfe0029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000255aa6df07540cb5d3d297f0d0d4d84cb52bc8e600000000000000000000000000000000000000000000000000000000000021C0
-----Decoded View---------------
Arg [0] : _token_address (address): 0x255Aa6DF07540Cb5d3d297f0D0D4D84cb52bc8e6
Arg [1] : _challenge_period (uint32): 8640
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000255aa6df07540cb5d3d297f0d0d4d84cb52bc8e6
Arg [1] : 00000000000000000000000000000000000000000000000000000000000021C0
Swarm Source
bzzr://b5ead2751fee6002dbd1432c294d23a630a2257cb566a1d2a3c92d9ecd7f9cfe
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.