0 ETH
USD
BTC
0xed06d46FFB309128C4458A270C99c824dc127f5D
In order to save any account details you will need to provide a signed message of that account for verification. Currently we support only signatures generated by the MyCrypto Tool.
The signature text MUST CONTAIN the the string " etherchain.org ".
Hash | Block | Type | From | To | Value | Fee | Time |
---|
pragma solidity ^0.4.18;
// File: contracts/EtherDeltaI.sol
contract EtherDeltaI {
uint public feeMake; //percentage times (1 ether)
uint public feeTake; //percentage times (1 ether)
mapping (address => mapping (address => uint)) public tokens; //mapping of token addresses to mapping of account balances (token=0 means Ether)
mapping (address => mapping (bytes32 => bool)) public orders; //mapping of user accounts to mapping of order hashes to booleans (true = submitted by user, equivalent to offchain signature)
mapping (address => mapping (bytes32 => uint)) public orderFills; //mapping of user accounts to mapping of order hashes to uints (amount of order that has been filled)
function deposit() payable;
function withdraw(uint amount);
function depositToken(address token, uint amount);
function withdrawToken(address token, uint amount);
function balanceOf(address token, address user) constant returns (uint);
function order(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce);
function trade(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s, uint amount);
function testTrade(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s, uint amount, address sender) constant returns(bool);
function availableVolume(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s) constant returns(uint);
function amountFilled(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s) constant returns(uint);
function cancelOrder(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, uint8 v, bytes32 r, bytes32 s);
}
// File: contracts/KindMath.sol
/**
* @title KindMath
* @dev Math operations with safety checks that fail
*/
library KindMath {
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a * b;
require(a == 0 || c / a == b);
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a);
return a - b;
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a);
return c;
}
}
// File: contracts/KeyValueStorage.sol
contract KeyValueStorage {
mapping(address => mapping(bytes32 => uint256)) _uintStorage;
mapping(address => mapping(bytes32 => address)) _addressStorage;
mapping(address => mapping(bytes32 => bool)) _boolStorage;
mapping(address => mapping(bytes32 => bytes32)) _bytes32Storage;
/**** Get Methods ***********/
function getAddress(bytes32 key) public view returns (address) {
return _addressStorage[msg.sender][key];
}
function getUint(bytes32 key) public view returns (uint) {
return _uintStorage[msg.sender][key];
}
function getBool(bytes32 key) public view returns (bool) {
return _boolStorage[msg.sender][key];
}
function getBytes32(bytes32 key) public view returns (bytes32) {
return _bytes32Storage[msg.sender][key];
}
/**** Set Methods ***********/
function setAddress(bytes32 key, address value) public {
_addressStorage[msg.sender][key] = value;
}
function setUint(bytes32 key, uint value) public {
_uintStorage[msg.sender][key] = value;
}
function setBool(bytes32 key, bool value) public {
_boolStorage[msg.sender][key] = value;
}
function setBytes32(bytes32 key, bytes32 value) public {
_bytes32Storage[msg.sender][key] = value;
}
/**** Delete Methods ***********/
function deleteAddress(bytes32 key) public {
delete _addressStorage[msg.sender][key];
}
function deleteUint(bytes32 key) public {
delete _uintStorage[msg.sender][key];
}
function deleteBool(bytes32 key) public {
delete _boolStorage[msg.sender][key];
}
function deleteBytes32(bytes32 key) public {
delete _bytes32Storage[msg.sender][key];
}
}
// File: contracts/StorageStateful.sol
contract StorageStateful {
KeyValueStorage public keyValueStorage;
}
// File: contracts/TokenI.sol
contract Token {
/// @return total amount of tokens
function totalSupply() public returns (uint256);
/// @param _owner The address from which the balance will be retrieved
/// @return The balance
function balanceOf(address _owner) public returns (uint256);
/// @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);
/// @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);
/// @notice `msg.sender` approves `_addr` to spend `_value` tokens
/// @param _spender The address of the account able to transfer the tokens
/// @param _value The amount of wei to be approved for transfer
/// @return Whether the approval was successful or not
function approve(address _spender, uint256 _value) public returns (bool);
/// @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 returns (uint256);
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
uint256 public decimals;
string public name;
}
// File: contracts/EnclavesDEX.sol
contract EnclavesDEX is StorageStateful {
using KindMath for uint256;
address public admin; //the admin address
address public feeAccount; //the account that will receive fees
struct EtherDeltaInfo {
uint256 feeMake;
uint256 feeTake;
}
EtherDeltaInfo public etherDeltaInfo;
uint256 public feeTake; //percentage times 1 ether
uint256 public feeAmountThreshold; //gasPrice amount under which no fees are charged
address public etherDelta;
bool public useEIP712 = true;
bytes32 public tradeABIHash;
bytes32 public withdrawABIHash;
bool freezeTrading;
bool depositTokenLock;
mapping (address => mapping (uint256 => bool)) nonceCheck;
mapping (address => mapping (address => uint256)) public tokens; //mapping of token addresses to mapping of account balances (token=0 means Ether)
mapping (address => mapping (bytes32 => bool)) public orders; //mapping of user accounts to mapping of order hashes to booleans (true = submitted by user, equivalent to offchain signature)
mapping (address => mapping (bytes32 => uint256)) public orderFills; //mapping of user accounts to mapping of order hashes to uints (amount of order that has been filled)
//Unused here - used in Proxy
address internal implementation;
address public proposedImplementation;
uint256 public proposedTimestamp;
event Order(address indexed tokenGet, uint256 amountGet, address indexed tokenGive, uint256 amountGive, uint256 expires, uint256 nonce, address indexed user);
event Cancel(address indexed tokenGet, uint256 amountGet, address indexed tokenGive, uint256 amountGive, uint256 expires, uint256 nonce, address indexed user, uint8 v, bytes32 r, bytes32 s);
event Trade(address tokenGet, uint256 amountGet, address tokenGive, uint256 amountGive, address indexed get, address indexed give, uint8 exchange);
event Deposit(address indexed token, address indexed user, uint256 amount, uint256 balance);
event Withdraw(address indexed token, address indexed user, uint256 amount, uint256 balance);
event WithdrawPreSigned(address indexed feeToken, uint256 feeValue, address indexed feeReceiver);
event Rebalance(address indexed dex, address indexed token, uint256 amount);
modifier onlyAdmin {
require(msg.sender == admin);
_;
}
modifier onlyEtherDelta {
require(msg.sender == etherDelta);
_;
}
modifier markTokenDeposit {
depositTokenLock = true;
_;
depositTokenLock = false;
}
modifier inTokenDeposit {
require(depositTokenLock);
_;
}
modifier notFrozen {
require(!freezeTrading);
_;
}
function setEtherDeltaFees() public onlyAdmin {
etherDeltaInfo.feeMake = EtherDeltaI(etherDelta).feeMake();
etherDeltaInfo.feeTake = EtherDeltaI(etherDelta).feeTake();
}
function() public payable onlyEtherDelta {
}
function setTradeABIHash(bytes32 _tradeABIHash) public onlyAdmin {
tradeABIHash = _tradeABIHash;
}
function setWithdrawABIHash(bytes32 _withdrawABIHash) public onlyAdmin {
withdrawABIHash = _withdrawABIHash;
}
function setUseEIP712(bool _useEIP712) public onlyAdmin {
useEIP712 = _useEIP712;
}
function changeAdmin(address _admin) public onlyAdmin {
admin = _admin;
}
function changeFeeAccount(address _feeAccount) public onlyAdmin {
require(_feeAccount != address(0));
feeAccount = _feeAccount;
}
function changeFeeTake(uint256 _feeTake) public onlyAdmin {
feeTake = _feeTake;
}
function changeFeeAmountThreshold(uint256 _feeAmountThreshold) public onlyAdmin {
feeAmountThreshold = _feeAmountThreshold;
}
function changeFreezeTrading(bool _freezeTrading) public onlyAdmin {
freezeTrading = _freezeTrading;
}
function deposit() public payable {
if (msg.value > 0) {
tokens[address(0)][msg.sender] = tokens[address(0)][msg.sender].add(msg.value);
Deposit(address(0), msg.sender, msg.value, tokens[address(0)][msg.sender]);
}
}
function depositEther(uint256 _amount) internal {
//Will throw if not enough ether sent
uint256 refund = msg.value.sub(_amount);
if (_amount != 0) {
tokens[address(0)][msg.sender] = tokens[address(0)][msg.sender].add(_amount);
Deposit(address(0), msg.sender, _amount, tokens[address(0)][msg.sender]);
}
if (refund > 0) {
msg.sender.transfer(refund);
}
}
function depositToken(address _token, uint256 _amount) public markTokenDeposit {
require(_token != address(0));
require(Token(_token).transferFrom(msg.sender, address(this), _amount));
tokens[_token][msg.sender] = tokens[_token][msg.sender].add(_amount);
Deposit(_token, msg.sender, _amount, tokens[_token][msg.sender]);
}
function depositBoth(address _token, uint256 _amount) public payable {
depositToken(_token, _amount);
deposit();
}
function processDeposits(address _token, uint256 _amount) internal {
//Always need to deal with possible non-zero msg.value
uint256 etherAmount = 0;
if ((_token == address(0)) && (tokens[address(0)][msg.sender] < _amount)) {
etherAmount = _amount.sub(tokens[address(0)][msg.sender]);
}
depositEther(etherAmount);
//Only pull tokens if needed
if ((_token != address(0)) && (tokens[_token][msg.sender] < _amount)) {
depositToken(_token, _amount.sub(tokens[_token][msg.sender]));
}
}
function withdraw(uint256 _amount) public {
withdrawUser(_amount, msg.sender);
}
function withdrawUser(uint256 _amount, address _user) internal {
tokens[address(0)][_user] = tokens[address(0)][_user].sub(_amount);
if (this.balance < _amount) {
rebalanceEnclaves(address(0), _amount);
}
_user.transfer(_amount);
Withdraw(address(0), _user, _amount, tokens[address(0)][_user]);
}
function withdrawToken(address _token, uint256 _amount) public {
withdrawTokenUser(_token, _amount, msg.sender);
}
function withdrawTokenUser(address _token, uint256 _amount, address _user) internal {
require(_token != 0);
tokens[_token][_user] = tokens[_token][_user].sub(_amount);
if (Token(_token).balanceOf(address(this)) < _amount) {
rebalanceEnclaves(_token, _amount);
}
require(Token(_token).transfer(_user, _amount));
Withdraw(_token, _user, _amount, tokens[_token][_user]);
}
function withdrawTokenMulti(address[] _tokens, uint256[] _amounts) public {
require(_tokens.length == _amounts.length);
for (uint256 i = 0; i < _tokens.length; i++) {
withdrawToken(_tokens[i], _amounts[i]);
}
}
function withdrawBoth(address _token, uint256 _tokenAmount, uint256 _ethAmount) public {
withdrawToken(_token, _tokenAmount);
withdraw(_ethAmount);
}
function tokenFallback(address /* _from */, uint256 /* _value */, bytes /* _data */) public view inTokenDeposit {
//Having this function allows ERC23 tokens to be deposited via the usual approve / transferFrom methods
//It should only be called whilst a depositToken is occurring
}
function balanceOf(address _token, address _user) public view returns (uint256) {
return tokens[_token][_user];
}
function order(address _tokenGet, uint256 _amountGet, address _tokenGive, uint256 _amountGive, uint256 _expires, uint256 _nonce) public {
bytes32 orderHash = keccak256(address(this), _tokenGet, _amountGet, _tokenGive, _amountGive, _expires, _nonce);
orders[msg.sender][orderHash] = true;
Order(_tokenGet, _amountGet, _tokenGive, _amountGive, _expires, _nonce, msg.sender);
}
function rebalanceEtherDelta(address _token, uint256 _amount) internal {
uint256 enclavesBalance;
if (_token == address(0)) {
enclavesBalance = this.balance;
if (enclavesBalance < _amount) {
_amount = enclavesBalance;
}
EtherDeltaI(etherDelta).deposit.value(_amount)();
} else {
enclavesBalance = Token(_token).balanceOf(address(this));
if (enclavesBalance < _amount) {
_amount = enclavesBalance;
}
Token(_token).approve(etherDelta, _amount);
EtherDeltaI(etherDelta).depositToken(_token, _amount);
}
Rebalance(etherDelta, _token, _amount);
}
function rebalanceEnclaves(address _token, uint256 _amount) internal {
uint256 edBalance = EtherDeltaI(etherDelta).balanceOf(_token, address(this));
if (edBalance < _amount) {
_amount = edBalance;
}
if (_token == address(0)) {
EtherDeltaI(etherDelta).withdraw(_amount);
} else {
EtherDeltaI(etherDelta).withdrawToken(_token, _amount);
}
Rebalance(address(this), _token, _amount);
}
function tradeEtherDelta(address _tokenGet, uint256 _amountGet, address _tokenGive, uint256 _amountGive, uint256 _expires, uint256 _nonce, address _user, uint8 _v, bytes32 _r, bytes32 _s, uint256 _amount, bool _withdraw) public notFrozen payable returns (uint256) {
_amount = availableVolumeEtherDelta(_tokenGet, _amountGet, _tokenGive, _amountGive, _expires, _nonce, _user, _amount);
require(_amount > 0);
_tradeEtherDelta(_tokenGet, _amountGet, _tokenGive, _amountGive, _expires, _nonce, _user, _v, _r, _s, _amount);
if (_withdraw) {
if (_tokenGive == address(0)) {
withdraw(_amountGive.mul(_amount) / _amountGet);
} else {
withdrawToken(_tokenGive, _amountGive.mul(_amount) / _amountGet);
}
}
return _amount;
}
//amount is denominated in tokenGet
function _tradeEtherDelta(address _tokenGet, uint256 _amountGet, address _tokenGive, uint256 _amountGive, uint256 _expires, uint256 _nonce, address _user, uint8 _v, bytes32 _r, bytes32 _s, uint256 _amount) internal {
uint256 cost = _amount.add(_amount.mul(etherDeltaInfo.feeTake) / 1 ether);
processDeposits(_tokenGet, cost);
tokens[_tokenGet][msg.sender] = tokens[_tokenGet][msg.sender].sub(cost);
if (EtherDeltaI(etherDelta).balanceOf(_tokenGet, address(this)) < cost) {
rebalanceEtherDelta(_tokenGet, cost);
}
EtherDeltaI(etherDelta).trade(_tokenGet, _amountGet, _tokenGive, _amountGive, _expires, _nonce, _user, _v, _r, _s, _amount);
//Reuse cost to avoid "CompilerError: Stack too deep, try removing local variables."
cost = _amountGive.mul(_amount) / _amountGet;
tokens[_tokenGive][msg.sender] = tokens[_tokenGive][msg.sender].add(cost);
Trade(_tokenGet, _amount, _tokenGive, cost, _user, msg.sender, 1);
}
function trade(address _tokenGet, uint256 _amountGet, address _tokenGive, uint256 _amountGive, uint256 _expires, uint256 _nonce, address _user, uint8 _v, bytes32 _r, bytes32 _s, uint256 _amount, bool _withdraw) public notFrozen payable returns (uint256) {
uint256 availableVolume;
//Reuse _r to avoid "CompilerError: Stack too deep, try removing local variables."
(availableVolume, _r) = availableVolumeEnclaves(_tokenGet, _amountGet, _tokenGive, _amountGive, _expires, _nonce, _user, _v, _r, _s);
_amount = (availableVolume < _amount) ? availableVolume : _amount;
require(_amount > 0);
_trade(_tokenGet, _amountGet, _tokenGive, _amountGive, _user, _amount, _r);
if (_withdraw) {
if (_tokenGive == address(0)) {
withdraw(_amountGive.mul(_amount) / _amountGet);
} else {
withdrawToken(_tokenGive, _amountGive.mul(_amount) / _amountGet);
}
}
return _amount;
}
//_amount is denominated in tokenGet
function _trade(address _tokenGet, uint256 _amountGet, address _tokenGive, uint256 _amountGive, address _user, uint256 _amount, bytes32 _orderHash) internal {
uint256 ethAmount = (_tokenGet == address(0)) ? _amount : _amountGive.mul(_amount) / _amountGet;
uint256 feeTakeXfer = (ethAmount <= feeAmountThreshold) ? 0 : _amount.mul(feeTake) / (1 ether);
uint256 cost = _amount.add(feeTakeXfer);
processDeposits(_tokenGet, cost);
tokens[_tokenGet][msg.sender] = tokens[_tokenGet][msg.sender].sub(cost);
//
tokens[_tokenGet][_user] = tokens[_tokenGet][_user].add(_amount);
if (feeTakeXfer > 0) {
tokens[_tokenGet][feeAccount] = tokens[_tokenGet][feeAccount].add(feeTakeXfer);
}
tokens[_tokenGive][_user] = tokens[_tokenGive][_user].sub(_amountGive.mul(_amount) / _amountGet);
//
//Reuse cost to avoid "CompilerError: Stack too deep, try removing local variables."
cost = _amountGive.mul(_amount) / _amountGet;
tokens[_tokenGive][msg.sender] = tokens[_tokenGive][msg.sender].add(cost);
orderFills[_user][_orderHash] = orderFills[_user][_orderHash].add(_amount);
Trade(_tokenGet, _amount, _tokenGive, cost, _user, msg.sender, 0);
}
function checkSig(bytes32 _abiHash, bytes32 _hash, uint8 _v, bytes32 _r, bytes32 _s, address _user) public view returns(bool) {
if (useEIP712) {
return (ecrecover(keccak256(_abiHash, _hash), _v, _r, _s) == _user);
} else {
return (ecrecover(keccak256("\x19Ethereum Signed Message:\n32", _hash), _v, _r, _s) == _user);
}
}
function availableVolumeEnclaves(address _tokenGet, uint256 _amountGet, address _tokenGive, uint256 _amountGive, uint256 _expires, uint256 _nonce, address _user, uint8 _v, bytes32 _r, bytes32 _s) public view returns (uint256, bytes32) {
bytes32 orderHash = keccak256(address(this), _tokenGet, _amountGet, _tokenGive, _amountGive, _expires, _nonce);
if (!(
(orders[_user][orderHash] || checkSig(tradeABIHash, orderHash, _v, _r, _s, _user)) &&
block.number <= _expires
)) return (0, orderHash);
//Reuse amountGet/Give to avoid "CompilerError: Stack too deep, try removing local variables."
_amountGive = tokens[_tokenGive][_user].mul(_amountGet) / _amountGive;
_amountGet = _amountGet.sub(orderFills[_user][orderHash]);
_amountGet = (_amountGive < _amountGet) ? _amountGive : _amountGet;
return (_amountGet, orderHash);
}
function availableVolumeEtherDelta(address _tokenGet, uint256 _amountGet, address _tokenGive, uint256 _amountGive, uint256 _expires, uint256 _nonce, address _user, uint256 _amount) public view returns (uint256) {
if (block.number > _expires) {
return 0;
}
bytes32 orderHash = sha256(etherDelta, _tokenGet, _amountGet, _tokenGive, _amountGive, _expires, _nonce);
//Reuse amountGet/Give to avoid "CompilerError: Stack too deep, try removing local variables."
_amountGive = EtherDeltaI(etherDelta).tokens(_tokenGive, _user).mul(_amountGet) / _amountGive;
_amountGet = _amountGet.sub(EtherDeltaI(etherDelta).orderFills(_user, orderHash));
if (_amountGet > _amountGive) {
_amountGet = _amountGive;
}
if (_amountGet > _amount) {
_amountGet = _amount;
}
return _amountGet;
}
function amountFilled(address _tokenGet, uint256 _amountGet, address _tokenGive, uint256 _amountGive, uint256 _expires, uint256 _nonce, address _user) public view returns(uint256) {
bytes32 hash = keccak256(address(this), _tokenGet, _amountGet, _tokenGive, _amountGive, _expires, _nonce);
return orderFills[_user][hash];
}
function cancelOrder(address _tokenGet, uint256 _amountGet, address _tokenGive, uint256 _amountGive, uint256 _expires, uint256 _nonce, uint8 _v, bytes32 _r, bytes32 _s) public {
bytes32 hash = keccak256(address(this), _tokenGet, _amountGet, _tokenGive, _amountGive, _expires, _nonce);
require(orders[msg.sender][hash] || checkSig(tradeABIHash, hash, _v, _r, _s, msg.sender));
orderFills[msg.sender][hash] = _amountGet;
Cancel(_tokenGet, _amountGet, _tokenGive, _amountGive, _expires, _nonce, msg.sender, _v, _r, _s);
}
function withdrawPreSigned(address _token, uint256 _value, address _feeToken, uint256 _feeValue, uint256 _nonce, address _user, uint8 _v, bytes32 _r, bytes32 _s) public {
require(nonceCheck[_user][_nonce] == false);
bytes32 hash = keccak256(address(this), _token, _value, _feeToken, _feeValue, _nonce);
require(checkSig(withdrawABIHash, hash, _v, _r, _s, _user));
nonceCheck[_user][_nonce] = true;
//Debit fee to sender
tokens[_feeToken][_user] = tokens[_feeToken][_user].sub(_feeValue);
tokens[_feeToken][msg.sender] = tokens[_feeToken][msg.sender].add(_feeValue);
if (_token == address(0)) {
withdrawUser(_value, _user);
} else {
withdrawTokenUser(_token, _value, _user);
}
WithdrawPreSigned(_feeToken, _feeValue, msg.sender);
}
}
Type | Name | Constant | Signature |
---|---|---|---|
function | tradeEtherDelta(_tokenGet address, _amountGet uint256, _tokenGive address, _amountGive uint256, _expires uint256, _nonce uint256, _user address, _v uint8, _r bytes32, _s bytes32, _amount uint256, _withdraw bool) => ( uint256) | false | 0x04f1e4e2 |
function | order(_tokenGet address, _amountGet uint256, _tokenGive address, _amountGive uint256, _expires uint256, _nonce uint256) | false | 0x0b927666 |
function | orderFills( address, bytes32) => ( uint256) | true | 0x19774d43 |
function | etherDeltaInfo() => (feeMake uint256, feeTake uint256) | true | 0x1bff4786 |
function | setUseEIP712(_useEIP712 bool) | false | 0x251d3589 |
function | cancelOrder(_tokenGet address, _amountGet uint256, _tokenGive address, _amountGive uint256, _expires uint256, _nonce uint256, _v uint8, _r bytes32, _s bytes32) | false | 0x278b8c0e |
function | amountFilled(_tokenGet address, _amountGet uint256, _tokenGive address, _amountGive uint256, _expires uint256, _nonce uint256, _user address) => ( uint256) | true | 0x2d804ca2 |
function | withdraw(_amount uint256) | false | 0x2e1a7d4d |
function | setTradeABIHash(_tradeABIHash bytes32) | false | 0x30230796 |
function | availableVolumeEtherDelta(_tokenGet address, _amountGet uint256, _tokenGive address, _amountGive uint256, _expires uint256, _nonce uint256, _user address, _amount uint256) => ( uint256) | true | 0x31f6eac8 |
function | depositToken(_token address, _amount uint256) | false | 0x338b5dea |
function | proposedTimestamp() => ( uint256) | true | 0x3cf52ffb |
function | withdrawPreSigned(_token address, _value uint256, _feeToken address, _feeValue uint256, _nonce uint256, _user address, _v uint8, _r bytes32, _s bytes32) | false | 0x4b41cb60 |
function | depositBoth(_token address, _amount uint256) | false | 0x4b56cd27 |
function | tokens( address, address) => ( uint256) | true | 0x508493bc |
function | changeFreezeTrading(_freezeTrading bool) | false | 0x51731f21 |
function | feeAmountThreshold() => ( uint256) | true | 0x55ce76e6 |
function | useEIP712() => ( bool) | true | 0x5bd948b1 |
function | keyValueStorage() => ( address) | true | 0x5d4d061e |
function | feeAccount() => ( address) | true | 0x65e17c9d |
function | changeFeeAccount(_feeAccount address) | false | 0x71ffcb16 |
function | changeFeeTake(_feeTake uint256) | false | 0x8823a9c0 |
function | tradeABIHash() => ( bytes32) | true | 0x8e1e2add |
function | changeAdmin(_admin address) | false | 0x8f283970 |
function | withdrawBoth(_token address, _tokenAmount uint256, _ethAmount uint256) | false | 0x91feea93 |
function | availableVolumeEnclaves(_tokenGet address, _amountGet uint256, _tokenGive address, _amountGive uint256, _expires uint256, _nonce uint256, _user address, _v uint8, _r bytes32, _s bytes32) => ( uint256, bytes32) | true | 0x969283e2 |
function | trade(_tokenGet address, _amountGet uint256, _tokenGive address, _amountGive uint256, _expires uint256, _nonce uint256, _user address, _v uint8, _r bytes32, _s bytes32, _amount uint256, _withdraw bool) => ( uint256) | false | 0x9b788752 |
function | withdrawToken(_token address, _amount uint256) | false | 0x9e281a98 |
function | proposedImplementation() => ( address) | true | 0xbb057c5e |
function | orders( address, bytes32) => ( bool) | true | 0xbb5f4629 |
function | changeFeeAmountThreshold(_feeAmountThreshold uint256) | false | 0xbfcabcbf |
function | tokenFallback( address, uint256, bytes) | true | 0xc0ee0b8a |
function | feeTake() => ( uint256) | true | 0xc281309e |
function | deposit() | false | 0xd0e30db0 |
function | etherDelta() => ( address) | true | 0xd67a10e3 |
function | setEtherDeltaFees() | false | 0xe68a655c |
function | setWithdrawABIHash(_withdrawABIHash bytes32) | false | 0xe7d854af |
function | withdrawTokenMulti(_tokens address[], _amounts uint256[]) | false | 0xf700ead9 |
function | balanceOf(_token address, _user address) => ( uint256) | true | 0xf7888aec |
function | admin() => ( address) | true | 0xf851a440 |
function | checkSig(_abiHash bytes32, _hash bytes32, _v uint8, _r bytes32, _s bytes32, _user address) => ( bool) | true | 0xfa043b0f |
function | withdrawABIHash() => ( bytes32) | true | 0xfe26f16f |
fallback | |||
event | Order(tokenGet address, amountGet uint256, tokenGive address, amountGive uint256, expires uint256, nonce uint256, user address) | 0x3f7f2eda73683c21a15f9435af1028c93185b5f1fa38270762dc32be606b3e85 | |
event | Cancel(tokenGet address, amountGet uint256, tokenGive address, amountGive uint256, expires uint256, nonce uint256, user address, v uint8, r bytes32, s bytes32) | 0x1e0b760c386003e9cb9bcf4fcf3997886042859d9b6ed6320e804597fcdb28b0 | |
event | Trade(tokenGet address, amountGet uint256, tokenGive address, amountGive uint256, get address, give address, exchange uint8) | 0x7b6c917cd708d6f749ab415a0f1aa5ced6110d03141d28e5b75e216ecb4e79f7 | |
event | Deposit(token address, user address, amount uint256, balance uint256) | 0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7 | |
event | Withdraw(token address, user address, amount uint256, balance uint256) | 0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567 | |
event | WithdrawPreSigned(feeToken address, feeValue uint256, feeReceiver address) | 0x8b47986acfb878e86b02f0a5ddbb807908f8a7b61c412ad3b3b855fd057aecc6 | |
event | Rebalance(dex address, token address, amount uint256) | 0xb0850b8e0f9e8315dde3c9f9f31138283e6bbe16cd29e8552eb1dcdf9fac9e3b |
[
{
"constant": false,
"inputs": [
{
"name": "_tokenGet",
"type": "address"
},
{
"name": "_amountGet",
"type": "uint256"
},
{
"name": "_tokenGive",
"type": "address"
},
{
"name": "_amountGive",
"type": "uint256"
},
{
"name": "_expires",
"type": "uint256"
},
{
"name": "_nonce",
"type": "uint256"
},
{
"name": "_user",
"type": "address"
},
{
"name": "_v",
"type": "uint8"
},
{
"name": "_r",
"type": "bytes32"
},
{
"name": "_s",
"type": "bytes32"
},
{
"name": "_amount",
"type": "uint256"
},
{
"name": "_withdraw",
"type": "bool"
}
],
"name": "tradeEtherDelta",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": true,
"stateMutability": "payable",
"type": "function",
"signature": "0x04f1e4e2"
},
{
"constant": false,
"inputs": [
{
"name": "_tokenGet",
"type": "address"
},
{
"name": "_amountGet",
"type": "uint256"
},
{
"name": "_tokenGive",
"type": "address"
},
{
"name": "_amountGive",
"type": "uint256"
},
{
"name": "_expires",
"type": "uint256"
},
{
"name": "_nonce",
"type": "uint256"
}
],
"name": "order",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function",
"signature": "0x0b927666"
},
{
"constant": true,
"inputs": [
{
"name": "",
"type": "address"
},
{
"name": "",
"type": "bytes32"
}
],
"name": "orderFills",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0x19774d43"
},
{
"constant": true,
"inputs": [],
"name": "etherDeltaInfo",
"outputs": [
{
"name": "feeMake",
"type": "uint256"
},
{
"name": "feeTake",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0x1bff4786"
},
{
"constant": false,
"inputs": [
{
"name": "_useEIP712",
"type": "bool"
}
],
"name": "setUseEIP712",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function",
"signature": "0x251d3589"
},
{
"constant": false,
"inputs": [
{
"name": "_tokenGet",
"type": "address"
},
{
"name": "_amountGet",
"type": "uint256"
},
{
"name": "_tokenGive",
"type": "address"
},
{
"name": "_amountGive",
"type": "uint256"
},
{
"name": "_expires",
"type": "uint256"
},
{
"name": "_nonce",
"type": "uint256"
},
{
"name": "_v",
"type": "uint8"
},
{
"name": "_r",
"type": "bytes32"
},
{
"name": "_s",
"type": "bytes32"
}
],
"name": "cancelOrder",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function",
"signature": "0x278b8c0e"
},
{
"constant": true,
"inputs": [
{
"name": "_tokenGet",
"type": "address"
},
{
"name": "_amountGet",
"type": "uint256"
},
{
"name": "_tokenGive",
"type": "address"
},
{
"name": "_amountGive",
"type": "uint256"
},
{
"name": "_expires",
"type": "uint256"
},
{
"name": "_nonce",
"type": "uint256"
},
{
"name": "_user",
"type": "address"
}
],
"name": "amountFilled",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0x2d804ca2"
},
{
"constant": false,
"inputs": [
{
"name": "_amount",
"type": "uint256"
}
],
"name": "withdraw",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function",
"signature": "0x2e1a7d4d"
},
{
"constant": false,
"inputs": [
{
"name": "_tradeABIHash",
"type": "bytes32"
}
],
"name": "setTradeABIHash",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function",
"signature": "0x30230796"
},
{
"constant": true,
"inputs": [
{
"name": "_tokenGet",
"type": "address"
},
{
"name": "_amountGet",
"type": "uint256"
},
{
"name": "_tokenGive",
"type": "address"
},
{
"name": "_amountGive",
"type": "uint256"
},
{
"name": "_expires",
"type": "uint256"
},
{
"name": "_nonce",
"type": "uint256"
},
{
"name": "_user",
"type": "address"
},
{
"name": "_amount",
"type": "uint256"
}
],
"name": "availableVolumeEtherDelta",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0x31f6eac8"
},
{
"constant": false,
"inputs": [
{
"name": "_token",
"type": "address"
},
{
"name": "_amount",
"type": "uint256"
}
],
"name": "depositToken",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function",
"signature": "0x338b5dea"
},
{
"constant": true,
"inputs": [],
"name": "proposedTimestamp",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0x3cf52ffb"
},
{
"constant": false,
"inputs": [
{
"name": "_token",
"type": "address"
},
{
"name": "_value",
"type": "uint256"
},
{
"name": "_feeToken",
"type": "address"
},
{
"name": "_feeValue",
"type": "uint256"
},
{
"name": "_nonce",
"type": "uint256"
},
{
"name": "_user",
"type": "address"
},
{
"name": "_v",
"type": "uint8"
},
{
"name": "_r",
"type": "bytes32"
},
{
"name": "_s",
"type": "bytes32"
}
],
"name": "withdrawPreSigned",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function",
"signature": "0x4b41cb60"
},
{
"constant": false,
"inputs": [
{
"name": "_token",
"type": "address"
},
{
"name": "_amount",
"type": "uint256"
}
],
"name": "depositBoth",
"outputs": [],
"payable": true,
"stateMutability": "payable",
"type": "function",
"signature": "0x4b56cd27"
},
{
"constant": true,
"inputs": [
{
"name": "",
"type": "address"
},
{
"name": "",
"type": "address"
}
],
"name": "tokens",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0x508493bc"
},
{
"constant": false,
"inputs": [
{
"name": "_freezeTrading",
"type": "bool"
}
],
"name": "changeFreezeTrading",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function",
"signature": "0x51731f21"
},
{
"constant": true,
"inputs": [],
"name": "feeAmountThreshold",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0x55ce76e6"
},
{
"constant": true,
"inputs": [],
"name": "useEIP712",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0x5bd948b1"
},
{
"constant": true,
"inputs": [],
"name": "keyValueStorage",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0x5d4d061e"
},
{
"constant": true,
"inputs": [],
"name": "feeAccount",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0x65e17c9d"
},
{
"constant": false,
"inputs": [
{
"name": "_feeAccount",
"type": "address"
}
],
"name": "changeFeeAccount",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function",
"signature": "0x71ffcb16"
},
{
"constant": false,
"inputs": [
{
"name": "_feeTake",
"type": "uint256"
}
],
"name": "changeFeeTake",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function",
"signature": "0x8823a9c0"
},
{
"constant": true,
"inputs": [],
"name": "tradeABIHash",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0x8e1e2add"
},
{
"constant": false,
"inputs": [
{
"name": "_admin",
"type": "address"
}
],
"name": "changeAdmin",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function",
"signature": "0x8f283970"
},
{
"constant": false,
"inputs": [
{
"name": "_token",
"type": "address"
},
{
"name": "_tokenAmount",
"type": "uint256"
},
{
"name": "_ethAmount",
"type": "uint256"
}
],
"name": "withdrawBoth",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function",
"signature": "0x91feea93"
},
{
"constant": true,
"inputs": [
{
"name": "_tokenGet",
"type": "address"
},
{
"name": "_amountGet",
"type": "uint256"
},
{
"name": "_tokenGive",
"type": "address"
},
{
"name": "_amountGive",
"type": "uint256"
},
{
"name": "_expires",
"type": "uint256"
},
{
"name": "_nonce",
"type": "uint256"
},
{
"name": "_user",
"type": "address"
},
{
"name": "_v",
"type": "uint8"
},
{
"name": "_r",
"type": "bytes32"
},
{
"name": "_s",
"type": "bytes32"
}
],
"name": "availableVolumeEnclaves",
"outputs": [
{
"name": "",
"type": "uint256"
},
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0x969283e2"
},
{
"constant": false,
"inputs": [
{
"name": "_tokenGet",
"type": "address"
},
{
"name": "_amountGet",
"type": "uint256"
},
{
"name": "_tokenGive",
"type": "address"
},
{
"name": "_amountGive",
"type": "uint256"
},
{
"name": "_expires",
"type": "uint256"
},
{
"name": "_nonce",
"type": "uint256"
},
{
"name": "_user",
"type": "address"
},
{
"name": "_v",
"type": "uint8"
},
{
"name": "_r",
"type": "bytes32"
},
{
"name": "_s",
"type": "bytes32"
},
{
"name": "_amount",
"type": "uint256"
},
{
"name": "_withdraw",
"type": "bool"
}
],
"name": "trade",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": true,
"stateMutability": "payable",
"type": "function",
"signature": "0x9b788752"
},
{
"constant": false,
"inputs": [
{
"name": "_token",
"type": "address"
},
{
"name": "_amount",
"type": "uint256"
}
],
"name": "withdrawToken",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function",
"signature": "0x9e281a98"
},
{
"constant": true,
"inputs": [],
"name": "proposedImplementation",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0xbb057c5e"
},
{
"constant": true,
"inputs": [
{
"name": "",
"type": "address"
},
{
"name": "",
"type": "bytes32"
}
],
"name": "orders",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0xbb5f4629"
},
{
"constant": false,
"inputs": [
{
"name": "_feeAmountThreshold",
"type": "uint256"
}
],
"name": "changeFeeAmountThreshold",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function",
"signature": "0xbfcabcbf"
},
{
"constant": true,
"inputs": [
{
"name": "",
"type": "address"
},
{
"name": "",
"type": "uint256"
},
{
"name": "",
"type": "bytes"
}
],
"name": "tokenFallback",
"outputs": [],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0xc0ee0b8a"
},
{
"constant": true,
"inputs": [],
"name": "feeTake",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0xc281309e"
},
{
"constant": false,
"inputs": [],
"name": "deposit",
"outputs": [],
"payable": true,
"stateMutability": "payable",
"type": "function",
"signature": "0xd0e30db0"
},
{
"constant": true,
"inputs": [],
"name": "etherDelta",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0xd67a10e3"
},
{
"constant": false,
"inputs": [],
"name": "setEtherDeltaFees",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function",
"signature": "0xe68a655c"
},
{
"constant": false,
"inputs": [
{
"name": "_withdrawABIHash",
"type": "bytes32"
}
],
"name": "setWithdrawABIHash",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function",
"signature": "0xe7d854af"
},
{
"constant": false,
"inputs": [
{
"name": "_tokens",
"type": "address[]"
},
{
"name": "_amounts",
"type": "uint256[]"
}
],
"name": "withdrawTokenMulti",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function",
"signature": "0xf700ead9"
},
{
"constant": true,
"inputs": [
{
"name": "_token",
"type": "address"
},
{
"name": "_user",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0xf7888aec"
},
{
"constant": true,
"inputs": [],
"name": "admin",
"outputs": [
{
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0xf851a440"
},
{
"constant": true,
"inputs": [
{
"name": "_abiHash",
"type": "bytes32"
},
{
"name": "_hash",
"type": "bytes32"
},
{
"name": "_v",
"type": "uint8"
},
{
"name": "_r",
"type": "bytes32"
},
{
"name": "_s",
"type": "bytes32"
},
{
"name": "_user",
"type": "address"
}
],
"name": "checkSig",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0xfa043b0f"
},
{
"constant": true,
"inputs": [],
"name": "withdrawABIHash",
"outputs": [
{
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function",
"signature": "0xfe26f16f"
},
{
"payable": true,
"stateMutability": "payable",
"type": "fallback"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "tokenGet",
"type": "address"
},
{
"indexed": false,
"name": "amountGet",
"type": "uint256"
},
{
"indexed": true,
"name": "tokenGive",
"type": "address"
},
{
"indexed": false,
"name": "amountGive",
"type": "uint256"
},
{
"indexed": false,
"name": "expires",
"type": "uint256"
},
{
"indexed": false,
"name": "nonce",
"type": "uint256"
},
{
"indexed": true,
"name": "user",
"type": "address"
}
],
"name": "Order",
"type": "event",
"signature": "0x3f7f2eda73683c21a15f9435af1028c93185b5f1fa38270762dc32be606b3e85"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "tokenGet",
"type": "address"
},
{
"indexed": false,
"name": "amountGet",
"type": "uint256"
},
{
"indexed": true,
"name": "tokenGive",
"type": "address"
},
{
"indexed": false,
"name": "amountGive",
"type": "uint256"
},
{
"indexed": false,
"name": "expires",
"type": "uint256"
},
{
"indexed": false,
"name": "nonce",
"type": "uint256"
},
{
"indexed": true,
"name": "user",
"type": "address"
},
{
"indexed": false,
"name": "v",
"type": "uint8"
},
{
"indexed": false,
"name": "r",
"type": "bytes32"
},
{
"indexed": false,
"name": "s",
"type": "bytes32"
}
],
"name": "Cancel",
"type": "event",
"signature": "0x1e0b760c386003e9cb9bcf4fcf3997886042859d9b6ed6320e804597fcdb28b0"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"name": "tokenGet",
"type": "address"
},
{
"indexed": false,
"name": "amountGet",
"type": "uint256"
},
{
"indexed": false,
"name": "tokenGive",
"type": "address"
},
{
"indexed": false,
"name": "amountGive",
"type": "uint256"
},
{
"indexed": true,
"name": "get",
"type": "address"
},
{
"indexed": true,
"name": "give",
"type": "address"
},
{
"indexed": false,
"name": "exchange",
"type": "uint8"
}
],
"name": "Trade",
"type": "event",
"signature": "0x7b6c917cd708d6f749ab415a0f1aa5ced6110d03141d28e5b75e216ecb4e79f7"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "token",
"type": "address"
},
{
"indexed": true,
"name": "user",
"type": "address"
},
{
"indexed": false,
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"name": "balance",
"type": "uint256"
}
],
"name": "Deposit",
"type": "event",
"signature": "0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "token",
"type": "address"
},
{
"indexed": true,
"name": "user",
"type": "address"
},
{
"indexed": false,
"name": "amount",
"type": "uint256"
},
{
"indexed": false,
"name": "balance",
"type": "uint256"
}
],
"name": "Withdraw",
"type": "event",
"signature": "0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "feeToken",
"type": "address"
},
{
"indexed": false,
"name": "feeValue",
"type": "uint256"
},
{
"indexed": true,
"name": "feeReceiver",
"type": "address"
}
],
"name": "WithdrawPreSigned",
"type": "event",
"signature": "0x8b47986acfb878e86b02f0a5ddbb807908f8a7b61c412ad3b3b855fd057aecc6"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"name": "dex",
"type": "address"
},
{
"indexed": true,
"name": "token",
"type": "address"
},
{
"indexed": false,
"name": "amount",
"type": "uint256"
}
],
"name": "Rebalance",
"type": "event",
"signature": "0xb0850b8e0f9e8315dde3c9f9f31138283e6bbe16cd29e8552eb1dcdf9fac9e3b"
}
]
bzz://9c5ed813e303cd4688c7eab250a0fc6c64fa2da55047f9a4236617108fab7d1a
6060604052600436106101ea5763ffffffff60e060020a60003504166304f1e4e281146102075780630b9276661461026157806319774d43146102935780631bff4786146102b5578063251d3589146102e0578063278b8c0e146102f85780632d804ca2146103375780632e1a7d4d14610372578063302307961461038857806331f6eac81461039e578063338b5dea146103dc5780633cf52ffb146103fe5780634b41cb60146104115780634b56cd2714610455578063508493bc1461046c57806351731f211461049157806355ce76e6146104a95780635bd948b1146104bc5780635d4d061e146104e357806365e17c9d1461051257806371ffcb16146105255780638823a9c0146105445780638e1e2add1461055a5780638f2839701461056d57806391feea931461058c578063969283e2146105b15780639b788752146105fa5780639e281a9814610642578063bb057c5e14610664578063bb5f462914610677578063bfcabcbf14610699578063c0ee0b8a146106af578063c281309e14610714578063d0e30db014610727578063d67a10e31461072f578063e68a655c14610742578063e7d854af14610755578063f700ead91461076b578063f7888aec146107fa578063f851a4401461081f578063fa043b0f14610832578063fe26f16f14610863575b60075433600160a060020a0390811691161461020557600080fd5b005b61024f600160a060020a0360043581169060243590604435811690606435906084359060a4359060c4351660ff60e43516610104356101243561014435610164351515610876565b60405190815260200160405180910390f35b341561026c57600080fd5b610205600160a060020a03600435811690602435906044351660643560843560a43561092e565b341561029e57600080fd5b61024f600160a060020a0360043516602435610a2d565b34156102c057600080fd5b6102c8610a4a565b60405191825260208201526040908101905180910390f35b34156102eb57600080fd5b6102056004351515610a53565b341561030357600080fd5b610205600160a060020a03600435811690602435906044351660643560843560a43560ff60c4351660e43561010435610aae565b341561034257600080fd5b61024f600160a060020a0360043581169060243590604435811690606435906084359060a4359060c43516610c0e565b341561037d57600080fd5b610205600435610cab565b341561039357600080fd5b610205600435610cb8565b34156103a957600080fd5b61024f600160a060020a0360043581169060243590604435811690606435906084359060a4359060c4351660e435610cd8565b34156103e757600080fd5b610205600160a060020a0360043516602435610eb4565b341561040957600080fd5b61024f61100c565b341561041c57600080fd5b610205600160a060020a0360043581169060243590604435811690606435906084359060a4351660ff60c4351660e43561010435611012565b610205600160a060020a03600435166024356111ec565b341561047757600080fd5b61024f600160a060020a0360043581169060243516611202565b341561049c57600080fd5b610205600435151561121f565b34156104b457600080fd5b61024f61124d565b34156104c757600080fd5b6104cf611253565b604051901515815260200160405180910390f35b34156104ee57600080fd5b6104f6611274565b604051600160a060020a03909116815260200160405180910390f35b341561051d57600080fd5b6104f6611283565b341561053057600080fd5b610205600160a060020a0360043516611292565b341561054f57600080fd5b6102056004356112f1565b341561056557600080fd5b61024f611311565b341561057857600080fd5b610205600160a060020a0360043516611317565b341561059757600080fd5b610205600160a060020a0360043516602435604435611361565b34156105bc57600080fd5b6102c8600160a060020a0360043581169060243590604435811690606435906084359060a4359060c4351660ff60e435166101043561012435611379565b61024f600160a060020a0360043581169060243590604435811690606435906084359060a4359060c4351660ff60e435166101043561012435610144356101643515156114e7565b341561064d57600080fd5b610205600160a060020a0360043516602435611595565b341561066f57600080fd5b6104f66115a0565b341561068257600080fd5b6104cf600160a060020a03600435166024356115af565b34156106a457600080fd5b6102056004356115cf565b34156106ba57600080fd5b61020560048035600160a060020a03169060248035919060649060443590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506115ef95505050505050565b341561071f57600080fd5b61024f611605565b61020561160b565b341561073a57600080fd5b6104f66116b3565b341561074d57600080fd5b6102056116c2565b341561076057600080fd5b61020560043561178f565b341561077657600080fd5b6102056004602481358181019083013580602081810201604051908101604052809392919081815260200183836020028082843782019150505050505091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437509496506117af95505050505050565b341561080557600080fd5b61024f600160a060020a0360043581169060243516611808565b341561082a57600080fd5b6104f6611833565b341561083d57600080fd5b6104cf60043560243560ff60443516606435608435600160a060020a0360a43516611842565b341561086e57600080fd5b61024f6119a1565b600a5460009060ff161561088957600080fd5b6108998d8d8d8d8d8d8d8a610cd8565b9250600083116108a857600080fd5b6108bb8d8d8d8d8d8d8d8d8d8d8d6119a7565b811561091d57600160a060020a038b1615156108f9576108f48c6108e58c8663ffffffff611c9016565b8115156108ee57fe5b04610cab565b61091d565b61091d8b8d61090e8d8763ffffffff611c9016565b81151561091757fe5b04611595565b50909b9a5050505050505050505050565b6000308787878787876040516c01000000000000000000000000600160a060020a0398891681028252968816870260148201526028810195909552929095169093026048830152605c820192909252607c810192909252609c82015260bc01604051908190039020600160a060020a033381166000818152600d6020908152604080832086845290915290819020805460ff1916600117905592935091878216918a16907f3f7f2eda73683c21a15f9435af1028c93185b5f1fa38270762dc32be606b3e85908a90899089908990518085815260200184815260200183815260200182815260200194505050505060405180910390a450505050505050565b600e60209081526000928352604080842090915290825290205481565b60035460045482565b60015433600160a060020a03908116911614610a6e57600080fd5b60078054911515740100000000000000000000000000000000000000000274ff000000000000000000000000000000000000000019909216919091179055565b6000308a8a8a8a8a8a6040516c01000000000000000000000000600160a060020a0398891681028252968816870260148201526028810195909552929095169093026048830152605c820192909252607c810192909252609c82015260bc01604051908190039020600160a060020a0333166000908152600d6020908152604080832084845290915290205490915060ff1680610b565750610b566008548286868633611842565b1515610b6157600080fd5b600160a060020a033381166000818152600e60209081526040808320868452909152908190208c905590918a811691908d16907f1e0b760c386003e9cb9bcf4fcf3997886042859d9b6ed6320e804597fcdb28b0908d908c908c908c908c908c908c90519687526020870195909552604080870194909452606086019290925260ff16608085015260a084015260c083019190915260e0909101905180910390a450505050505050505050565b600080308989898989896040516c01000000000000000000000000600160a060020a0398891681028252968816870260148201526028810195909552929095169093026048830152605c820192909252607c810192909252609c82015260bc01604051908190039020600160a060020a0384166000908152600e602090815260408083208484529091529020549250905050979650505050505050565b610cb58133611cbe565b50565b60015433600160a060020a03908116911614610cd357600080fd5b600855565b60008085431115610cec5760009150610ea7565b600754600290600160a060020a03168b8b8b8b8b8b6040516c01000000000000000000000000600160a060020a0398891681028252968816870260148201526028810195909552929095169093026048830152605c820192909252607c810192909252609c82015260bc016020604051808303816000865af11515610d7057600080fd5b50506040518051600754909250889150610dfe908b90600160a060020a031663508493bc8c8960405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b1515610ddb57600080fd5b5af11515610de857600080fd5b505050604051805191905063ffffffff611c9016565b811515610e0757fe5b6007549190049750610e8990600160a060020a03166319774d43868460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610e6657600080fd5b5af11515610e7357600080fd5b50505060405180518b915063ffffffff611dca16565b985086891115610e97578698505b82891115610ea3578298505b8891505b5098975050505050505050565b600a805461ff001916610100179055600160a060020a0382161515610ed857600080fd5b81600160a060020a03166323b872dd33308460405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610f3957600080fd5b5af11515610f4657600080fd5b505050604051805190501515610f5b57600080fd5b600160a060020a038083166000908152600c602090815260408083203390941683529290522054610f92908263ffffffff611ddf16565b600160a060020a038381166000818152600c60209081526040808320339095168084529490915290819020849055919290917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79185915191825260208201526040908101905180910390a35050600a805461ff0019169055565b60115481565b600160a060020a0384166000908152600b6020908152604080832088845290915281205460ff161561104357600080fd5b308a8a8a8a8a6040516c01000000000000000000000000600160a060020a0397881681028252958716860260148201526028810194909452919094169092026048820152605c810192909252607c820152609c01604051809103902090506110b1600954828686868a611842565b15156110bc57600080fd5b600160a060020a038086166000818152600b602090815260408083208b84528252808320805460ff19166001179055938c168252600c8152838220928252919091522054611110908863ffffffff611dca16565b600160a060020a038981166000908152600c602090815260408083208a8516845290915280822093909355339091168152205461114d9088611ddf565b600160a060020a03808a166000908152600c6020908152604080832033851684529091529020919091558a16151561118e576111898986611cbe565b611199565b6111998a8a87611df1565b33600160a060020a031688600160a060020a03167f8b47986acfb878e86b02f0a5ddbb807908f8a7b61c412ad3b3b855fd057aecc68960405190815260200160405180910390a350505050505050505050565b6111f68282610eb4565b6111fe61160b565b5050565b600c60209081526000928352604080842090915290825290205481565b60015433600160a060020a0390811691161461123a57600080fd5b600a805460ff1916911515919091179055565b60065481565b60075474010000000000000000000000000000000000000000900460ff1681565b600054600160a060020a031681565b600254600160a060020a031681565b60015433600160a060020a039081169116146112ad57600080fd5b600160a060020a03811615156112c257600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60015433600160a060020a0390811691161461130c57600080fd5b600555565b60085481565b60015433600160a060020a0390811691161461133257600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b61136b8383611595565b61137481610cab565b505050565b6000806000308d8d8d8d8d8d6040516c01000000000000000000000000600160a060020a0398891681028252968816870260148201526028810195909552929095169093026048830152605c820192909252607c810192909252609c82015260bc01604051908190039020600160a060020a0388166000908152600d6020908152604080832084845290915290205490915060ff16806114245750611424600854828888888c611842565b80156114305750884311155b151561144257600092509050806114d7565b600160a060020a03808c166000908152600c60209081526040808320938b16835292905220548a9061147a908e63ffffffff611c9016565b81151561148357fe5b600160a060020a0389166000908152600e602090815260408083208684529091529020549190049a506114bd908d9063ffffffff611dca16565b9b508b8a106114cc578b6114ce565b895b9b508b81925092505b509a509a98505050505050505050565b600a54600090819060ff16156114fc57600080fd5b61150e8e8e8e8e8e8e8e8e8e8e611379565b9650905083811061151f5783611521565b805b93506000841161153057600080fd5b61153f8e8e8e8e8c898c611fb5565b821561158357600160a060020a038c16151561156e576115698d6108e58d8763ffffffff611c9016565b611583565b6115838c8e61090e8e8863ffffffff611c9016565b50919c9b505050505050505050505050565b6111fe828233611df1565b601054600160a060020a031681565b600d60209081526000928352604080842090915290825290205460ff1681565b60015433600160a060020a039081169116146115ea57600080fd5b600655565b600a54610100900460ff16151561137457600080fd5b60055481565b60003411156116b15733600160a060020a031660009081526000805160206128b8833981519152602052604090205461164a903463ffffffff611ddf16565b600160a060020a03331660008181526000805160206128b88339815191526020526040808220849055919290917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79134915191825260208201526040908101905180910390a35b565b600754600160a060020a031681565b60015433600160a060020a039081169116146116dd57600080fd5b600754600160a060020a031663577863946040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561171c57600080fd5b5af1151561172957600080fd5b505050604051805160035550600754600160a060020a031663c281309e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561177457600080fd5b5af1151561178157600080fd5b505050604051805160045550565b60015433600160a060020a039081169116146117aa57600080fd5b600955565b600081518351146117bf57600080fd5b5060005b8251811015611374576118008382815181106117db57fe5b906020019060200201518383815181106117f157fe5b90602001906020020151611595565b6001016117c3565b600160a060020a039182166000908152600c6020908152604080832093909416825291909152205490565b600154600160a060020a031681565b60075460009074010000000000000000000000000000000000000000900460ff16156118fc5781600160a060020a03166001888860405191825260208201526040908101905180910390208787876040516000815260200160405260405193845260ff9092166020808501919091526040808501929092526060840192909252608090920191516020810390808403906000865af115156118e257600080fd5b505060206040510351600160a060020a0316149050611997565b81600160a060020a03166001876040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0160405180910390208787876040516000815260200160405260405193845260ff9092166020808501919091526040808501929092526060840192909252608090920191516020810390808403906000865af115156118e257600080fd5b9695505050505050565b60095481565b60006119e5670de0b6b3a76400006119cd60036001015485611c9090919063ffffffff16565b8115156119d657fe5b8491900463ffffffff611ddf16565b90506119f18c8261230a565b600160a060020a03808d166000908152600c602090815260408083203390941683529290522054611a28908263ffffffff611dca16565b600160a060020a03808e166000908152600c6020908152604080832033851684529091529081902092909255600754839291169063f7888aec908f9030905160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b1515611aa957600080fd5b5af11515611ab657600080fd5b505050604051805190501015611ad057611ad08c82612416565b600754600160a060020a0316630a19b14a8d8d8d8d8d8d8d8d8d8d8d60405160e060020a63ffffffff8e16028152600160a060020a039b8c166004820152602481019a909a52978a1660448a01526064890196909652608488019490945260a487019290925290951660c485015260ff90941660e484015261010483019390935261012482019290925261014481019190915261016401600060405180830381600087803b1515611b8057600080fd5b5af11515611b8d57600080fd5b508c9150611ba390508a8463ffffffff611c9016565b811515611bac57fe5b600160a060020a03808d166000908152600c6020908152604080832033909416835292905220549190049150611be8908263ffffffff611ddf16565b600160a060020a03808c166000908152600c6020908152604080832033851680855292529182902093909355908816907f7b6c917cd708d6f749ab415a0f1aa5ced6110d03141d28e5b75e216ecb4e79f7908f9086908f90879060019051600160a060020a039586168152602081019490945291909316604080840191909152606083019390935260ff16608082015260a001905180910390a3505050505050505050505050565b6000828202831580611cac5750828482811515611ca957fe5b04145b1515611cb757600080fd5b9392505050565b600160a060020a03811660009081526000805160206128b88339815191526020526040902054611cf4908363ffffffff611dca16565b600160a060020a0382811660009081526000805160206128b8833981519152602052604090209190915530163182901015611d3457611d34600083612627565b600160a060020a03811682156108fc0283604051600060405180830381858888f193505050501515611d6557600080fd5b600160a060020a03811660008181526000805160206128b88339815191526020526040808220547ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567918691905191825260208201526040908101905180910390a35050565b600082821115611dd957600080fd5b50900390565b600082820183811015611cb757600080fd5b600160a060020a0383161515611e0657600080fd5b600160a060020a038084166000908152600c6020908152604080832093851683529290522054611e3c908363ffffffff611dca16565b600160a060020a038085166000818152600c602090815260408083209487168352939052829020929092558391906370a082319030905160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515611eae57600080fd5b5af11515611ebb57600080fd5b505050604051805190501015611ed557611ed58383612627565b82600160a060020a031663a9059cbb828460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611f2957600080fd5b5af11515611f3657600080fd5b505050604051805190501515611f4b57600080fd5b600160a060020a038381166000818152600c602090815260408083209486168084529490915290819020547ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567918691905191825260208201526040908101905180910390a3505050565b60008080600160a060020a038a1615611fe85788611fd9888763ffffffff611c9016565b811515611fe257fe5b04611fea565b845b925060065483111561202357670de0b6b3a764000061201460055487611c9090919063ffffffff16565b81151561201d57fe5b04612026565b60005b9150612038858363ffffffff611ddf16565b90506120448a8261230a565b600160a060020a03808b166000908152600c60209081526040808320339094168352929052205461207b908263ffffffff611dca16565b600160a060020a038b81166000908152600c60209081526040808320338516845290915280822093909355908816815220546120b79086611ddf565b600160a060020a03808c166000908152600c60209081526040808320938b1683529290529081209190915582111561214c57600160a060020a03808b166000908152600c6020908152604080832060025490941683529290522054612122908363ffffffff611ddf16565b600160a060020a03808c166000908152600c60209081526040808320600254909416835292905220555b61219d89612160898863ffffffff611c9016565b81151561216957fe5b600160a060020a03808c166000908152600c60209081526040808320938d168352929052205491900463ffffffff611dca16565b600160a060020a03808a166000908152600c60209081526040808320938b1683529290522055886121d4888763ffffffff611c9016565b8115156121dd57fe5b600160a060020a03808b166000908152600c6020908152604080832033909416835292905220549190049150612219908263ffffffff611ddf16565b600160a060020a03808a166000908152600c6020908152604080832033851684528252808320949094559189168152600e82528281208782529091522054612267908663ffffffff611ddf16565b600160a060020a038088166000818152600e602090815260408083208a845290915280822094909455339092169290917f7b6c917cd708d6f749ab415a0f1aa5ced6110d03141d28e5b75e216ecb4e79f7918e918a918e91889151600160a060020a039586168152602081019490945291909316604080840191909152606083019390935260ff16608082015260a001905180910390a350505050505050505050565b6000600160a060020a038316158015612348575033600160a060020a031660009081526000805160206128b883398151915260205260409020548290105b156123875733600160a060020a031660009081526000805160206128b8833981519152602052604090205461238490839063ffffffff611dca16565b90505b612390816127c6565b600160a060020a038316158015906123ce5750600160a060020a038084166000908152600c6020908152604080832033909416835292905220548290105b1561137457600160a060020a038084166000908152600c60209081526040808320339094168352929052205461137490849061241190859063ffffffff611dca16565b610eb4565b6000600160a060020a03831615156124955750600160a060020a0330163181811015612440578091505b600754600160a060020a031663d0e30db0836040518263ffffffff1660e060020a0281526004016000604051808303818588803b151561247f57600080fd5b5af1151561248c57600080fd5b505050506125df565b82600160a060020a03166370a082313060405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156124e357600080fd5b5af115156124f057600080fd5b505050604051805191505081811015612507578091505b600754600160a060020a038085169163095ea7b391168460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561256157600080fd5b5af1151561256e57600080fd5b50505060405180515050600754600160a060020a031663338b5dea848460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156125ce57600080fd5b5af115156125db57600080fd5b5050505b600754600160a060020a0380851691167fb0850b8e0f9e8315dde3c9f9f31138283e6bbe16cd29e8552eb1dcdf9fac9e3b8460405190815260200160405180910390a3505050565b600754600090600160a060020a031663f7888aec843060405160e060020a63ffffffff8516028152600160a060020a03928316600482015291166024820152604401602060405180830381600087803b151561268257600080fd5b5af1151561268f57600080fd5b5050506040518051915050818110156126a6578091505b600160a060020a038316151561271357600754600160a060020a0316632e1a7d4d8360405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b15156126fe57600080fd5b5af1151561270b57600080fd5b50505061277a565b600754600160a060020a0316639e281a98848460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561276957600080fd5b5af1151561277657600080fd5b5050505b82600160a060020a031630600160a060020a03167fb0850b8e0f9e8315dde3c9f9f31138283e6bbe16cd29e8552eb1dcdf9fac9e3b8460405190815260200160405180910390a3505050565b60006127d8348363ffffffff611dca16565b9050811561287d5733600160a060020a031660009081526000805160206128b88339815191526020526040902054612816908363ffffffff611ddf16565b600160a060020a03331660008181526000805160206128b88339815191526020526040808220849055919290917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d79186915191825260208201526040908101905180910390a35b60008111156111fe57600160a060020a03331681156108fc0282604051600060405180830381858888f1935050505015156111fe57600080fd0013649b2456f1b42fef0f0040b3aaeabcd21a76a0f3f5defd4f583839455116e8a165627a7a723058209c5ed813e303cd4688c7eab250a0fc6c64fa2da55047f9a4236617108fab7d1a0029
Transaction 0xe809e18df490347598aed96d3b288364360709d30a9ccb110a8244d7f6bdf20a on the 2018-04-15T17:38:46+00:00 (10 months ago).