Sponsored Link:   COVESTING - EU-based digital asset exchange. Aggregated liquidity. Algorithmic & Copy-trading features. 24/7 support. Get access!
Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 233 txns
 Latest 25 txns from a total Of 233 transactions

TxHash Age From To Value [TxFee]
0x503665014d54be4ee59a608774db38ac7da1d1dbf17059f385098705a5e764df21 hrs 15 mins agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.30693729 Ether0.000067416741
0xf5936bad84a11cf81420cf64a2741552f04525f3a86941debc3f46274f1977491 day 21 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.30916196 Ether0.000101115
0x29844c3decd83f3a457c6e609de3ebf8394ea87f40729f4904fa87e92fa440113 days 4 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.31844786 Ether0.00047187
0x7648855f4a934bc2c27b6a6eb0525c3d5fd53548e4551e3ce16c8f393e71d81c4 days 5 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.30004045 Ether0.00020223
0x588c5fa57e2691dba1512702a173941a05c8e50853f044233965c26a0c838f6a5 days 14 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.31443421 Ether0.000101115
0x32870e701a336e16cb02029c88a99c430a03edf285f9eb4307157ad41b82b0ff6 days 13 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.31180565 Ether0.00013482
0x710b73e75925643d4138c3d53f1afff600d644ada47b04fc27659210de3e5a9a7 days 19 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.30286962 Ether0.0001314495
0x4631c23478e867a453701e1f4e4edb4f6afbeb61bc2c7ab661bbc1839a9414748 days 19 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.31148067 Ether0.00013482
0x3c477dd6d55e210d201bb18931a7e0396d6cf27c62584225c8adef2d55b00b179 days 20 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.31137475 Ether0.00033705
0xc700fbc8a961be875118f1ba6055278e2999b233c68c497a8f93c6aa72da7f4710 days 18 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.30315246 Ether0.00033705
0xecee364f535d614e3323a3b54b42889bd8f11368e9821b7de426f2fbce5d785211 days 17 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.30742272 Ether0.000235935
0x3388a56aa4abd894ab641604697802af8052d5e9f5da3589e2651120e089f6ab12 days 16 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.31651894 Ether0.000168525
0xf293b66e08dd45fa09ce7d95e710bc75a1e1570f19be02530862bb27a7a391ca13 days 11 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.31304719 Ether0.000306715508
0x1bf4cf5b3fc90c4080ce19405f6fcbb186197f3f4fe270c624d70e5fb590301614 days 16 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.31312913 Ether0.00020223
0x0249590e2d1e9b952454256f5bef4068e9b88a1691e32dae14d5451e84d288c715 days 11 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.31932518 Ether0.00020223
0x36acd1151606e2fc2fcca51671e7bf6687cc10f6228946d12a7afeb7feb5b74f16 days 5 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.30582208 Ether0.0002056005
0x1e4ba18eb05053cce29893f83b905f50b20cedf08b3c5fd74e6f2035cc20b0f417 days 5 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.3105686 Ether0.000370755
0x328cf47d85eb969ff0b10d118c66246137c6b91db4c253dce5bd24e4650cb7cd18 days 3 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.31125004 Ether0.0004550175
0x51796eb95e57381ab5cbf5c3ab5be8cafc5022c40e3b9ceb6f09280bb8249c6919 days 12 mins agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.3114858 Ether0.000505575
0xebb4c719751563a84bcd5d8f9a8b73ded8b8ba34d9d14f02759d74f10f6ccb7520 days 3 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.30498955 Ether0.00040446
0xf1b9c33307dab4f1d4a9b5762acfd84fcf69e8c7b0b42fc964bd02e5e4356a4321 days 8 mins agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.30139152 Ether0.000485352
0xb82deff67e9c2c2fdecb9a8baeff5550ce83f07ae9137f5bc52db22a6902021822 days 4 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.30138815 Ether0.0003876075
0x7ff3ff1917e35a62ee85cf21aa7e1ee862d7c361944bdebece451912b646c36923 days 10 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.31428768 Ether0.00033705
0x5e189793ae646a6e7560945016f5403f5a21e8ac2e444928996d9ddf8cf0e92824 days 17 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.31774508 Ether0.000707805
0x7c6e7d1f25d0d72f06acffa8b2b68ed85746f677240b101e99e9b0ed926327b625 days 21 hrs agoCoinotron_2  IN   0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0.30724096 Ether0.000541470825
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here to View More View All
ParentTxHash Block Age From To Value
0x503665014d54be4ee59a608774db38ac7da1d1dbf17059f385098705a5e764df584754321 hrs 15 mins ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.30693729 Ether
0xf5936bad84a11cf81420cf64a2741552f04525f3a86941debc3f46274f19774958416031 day 21 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.30916196 Ether
0x29844c3decd83f3a457c6e609de3ebf8394ea87f40729f4904fa87e92fa4401158339963 days 4 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.31844786 Ether
0x7648855f4a934bc2c27b6a6eb0525c3d5fd53548e4551e3ce16c8f393e71d81c58278844 days 5 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.30004045 Ether
0x588c5fa57e2691dba1512702a173941a05c8e50853f044233965c26a0c838f6a58198575 days 14 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.31443421 Ether
0x32870e701a336e16cb02029c88a99c430a03edf285f9eb4307157ad41b82b0ff58144406 days 13 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.31180565 Ether
0x710b73e75925643d4138c3d53f1afff600d644ada47b04fc27659210de3e5a9a58069997 days 19 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.30286962 Ether
0x4631c23478e867a453701e1f4e4edb4f6afbeb61bc2c7ab661bbc1839a94147458009168 days 19 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.31148067 Ether
0x3c477dd6d55e210d201bb18931a7e0396d6cf27c62584225c8adef2d55b00b1757949589 days 20 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.31137475 Ether
0xc700fbc8a961be875118f1ba6055278e2999b233c68c497a8f93c6aa72da7f47578963610 days 18 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.30315246 Ether
0xecee364f535d614e3323a3b54b42889bd8f11368e9821b7de426f2fbce5d7852578407111 days 17 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.30742272 Ether
0x3388a56aa4abd894ab641604697802af8052d5e9f5da3589e2651120e089f6ab577849812 days 16 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.31651894 Ether
0xf293b66e08dd45fa09ce7d95e710bc75a1e1570f19be02530862bb27a7a391ca577391913 days 11 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.31304719 Ether
0x1bf4cf5b3fc90c4080ce19405f6fcbb186197f3f4fe270c624d70e5fb5903016576729914 days 16 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.31312913 Ether
0x0249590e2d1e9b952454256f5bef4068e9b88a1691e32dae14d5451e84d288c7576266715 days 11 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.31932518 Ether
0x36acd1151606e2fc2fcca51671e7bf6687cc10f6228946d12a7afeb7feb5b74f575837516 days 5 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.30582208 Ether
0x1e4ba18eb05053cce29893f83b905f50b20cedf08b3c5fd74e6f2035cc20b0f4575273917 days 5 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.3105686 Ether
0x328cf47d85eb969ff0b10d118c66246137c6b91db4c253dce5bd24e4650cb7cd574774018 days 3 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.31125004 Ether
0x51796eb95e57381ab5cbf5c3ab5be8cafc5022c40e3b9ceb6f09280bb8249c69574283719 days 12 mins ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.3114858 Ether
0xebb4c719751563a84bcd5d8f9a8b73ded8b8ba34d9d14f02759d74f10f6ccb75573654020 days 3 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.30498955 Ether
0xf1b9c33307dab4f1d4a9b5762acfd84fcf69e8c7b0b42fc964bd02e5e4356a43573160421 days 8 mins ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.30139152 Ether
0xb82deff67e9c2c2fdecb9a8baeff5550ce83f07ae9137f5bc52db22a69020218572503322 days 4 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.30138815 Ether
0x7ff3ff1917e35a62ee85cf21aa7e1ee862d7c361944bdebece451912b646c369571795623 days 10 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.31428768 Ether
0x5e189793ae646a6e7560945016f5403f5a21e8ac2e444928996d9ddf8cf0e928571066024 days 17 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.31774508 Ether
0x7c6e7d1f25d0d72f06acffa8b2b68ed85746f677240b101e99e9b0ed926327b6570403725 days 21 hrs ago0x5e9f9741c0485d38dc387bfa64bb4ff46186d62d0x1522900b6dafac587d499a862861c0869be6e4280.30724096 Ether
[ Download CSV Export  ] 
Warning: The compiled contract might be susceptible to ZeroFunctionSelector (very low-severity) Solidity compiler bugs.

Contract Source Code Verified (Similar match)
Note: Displaying similar matching verified source code at contract 0xe236aebe408c6363deadff4db15938708fe07d3f(excluding Constructor Arguments if any)
Contract Name: Forwarder
Compiler Version: v0.4.16-nightly.2017.8.11+commit.c84de7fa
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.14;

/**
 * Contract that exposes the needed erc20 token functions
 */

contract ERC20Interface {
  // Send _value amount of tokens to address _to
  function transfer(address _to, uint256 _value) returns (bool success);
  // Get the account balance of another account with address _owner
  function balanceOf(address _owner) constant returns (uint256 balance);
}

/**
 * Contract that will forward any incoming Ether to its creator
 */
contract Forwarder {
  // Address to which any funds sent to this contract will be forwarded
  address public parentAddress;
  event ForwarderDeposited(address from, uint value, bytes data);

  event TokensFlushed(
    address tokenContractAddress, // The contract address of the token
    uint value // Amount of token sent
  );

  /**
   * Create the contract, and set the destination address to that of the creator
   */
  function Forwarder() {
    parentAddress = msg.sender;
  }

  /**
   * Modifier that will execute internal code block only if the sender is a parent of the forwarder contract
   */
  modifier onlyParent {
    if (msg.sender != parentAddress) {
      throw;
    }
    _;
  }

  /**
   * Default function; Gets called when Ether is deposited, and forwards it to the destination address
   */
  function() payable {
    if (!parentAddress.call.value(msg.value)(msg.data))
      throw;
    // Fire off the deposited event if we can forward it  
    ForwarderDeposited(msg.sender, msg.value, msg.data);
  }

  /**
   * Execute a token transfer of the full balance from the forwarder token to the main wallet contract
   * @param tokenContractAddress the address of the erc20 token contract
   */
  function flushTokens(address tokenContractAddress) onlyParent {
    ERC20Interface instance = ERC20Interface(tokenContractAddress);
    var forwarderAddress = address(this);
    var forwarderBalance = instance.balanceOf(forwarderAddress);
    if (forwarderBalance == 0) {
      return;
    }
    if (!instance.transfer(parentAddress, forwarderBalance)) {
      throw;
    }
    TokensFlushed(tokenContractAddress, forwarderBalance);
  }

  /**
   * It is possible that funds were sent to this address before the contract was deployed.
   * We can flush those funds to the destination address.
   */
  function flush() {
    if (!parentAddress.call.value(this.balance)())
      throw;
  }
}

/**
 * Basic multi-signer wallet designed for use in a co-signing environment where 2 signatures are required to move funds.
 * Typically used in a 2-of-3 signing configuration. Uses ecrecover to allow for 2 signatures in a single transaction.
 */
contract WalletSimple {
  // Events
  event Deposited(address from, uint value, bytes data);
  event SafeModeActivated(address msgSender);
  event Transacted(
    address msgSender, // Address of the sender of the message initiating the transaction
    address otherSigner, // Address of the signer (second signature) used to initiate the transaction
    bytes32 operation, // Operation hash (sha3 of toAddress, value, data, expireTime, sequenceId)
    address toAddress, // The address the transaction was sent to
    uint value, // Amount of Wei sent to the address
    bytes data // Data sent when invoking the transaction
  );
  event TokenTransacted(
    address msgSender, // Address of the sender of the message initiating the transaction
    address otherSigner, // Address of the signer (second signature) used to initiate the transaction
    bytes32 operation, // Operation hash (sha3 of toAddress, value, tokenContractAddress, expireTime, sequenceId)
    address toAddress, // The address the transaction was sent to
    uint value, // Amount of token sent
    address tokenContractAddress // The contract address of the token
  );

  // Public fields
  address[] public signers; // The addresses that can co-sign transactions on the wallet
  bool public safeMode = false; // When active, wallet may only send to signer addresses

  // Internal fields
  uint constant SEQUENCE_ID_WINDOW_SIZE = 10;
  uint[10] recentSequenceIds;

  /**
   * Modifier that will execute internal code block only if the sender is an authorized signer on this wallet
   */
  modifier onlysigner {
    if (!isSigner(msg.sender)) {
      throw;
    }
    _;
  }

  /**
   * Set up a simple multi-sig wallet by specifying the signers allowed to be used on this wallet.
   * 2 signers will be required to send a transaction from this wallet.
   * Note: The sender is NOT automatically added to the list of signers.
   * Signers CANNOT be changed once they are set
   *
   * @param allowedSigners An array of signers on the wallet
   */
  function WalletSimple(address[] allowedSigners) {
    if (allowedSigners.length != 3) {
      // Invalid number of signers
      throw;
    }
    signers = allowedSigners;
  }

  /**
   * Gets called when a transaction is received without calling a method
   */
  function() payable {
    if (msg.value > 0) {
      // Fire deposited event if we are receiving funds
      Deposited(msg.sender, msg.value, msg.data);
    }
  }

  /**
   * Create a new contract (and also address) that forwards funds to this contract
   * returns address of newly created forwarder address
   */
  function createForwarder() onlysigner returns (address) {
    return new Forwarder();
  }

  /**
   * Execute a multi-signature transaction from this wallet using 2 signers: one from msg.sender and the other from ecrecover.
   * The signature is a signed form (using eth.sign) of tightly packed toAddress, value, data, expireTime and sequenceId
   * Sequence IDs are numbers starting from 1. They are used to prevent replay attacks and may not be repeated.
   *
   * @param toAddress the destination address to send an outgoing transaction
   * @param value the amount in Wei to be sent
   * @param data the data to send to the toAddress when invoking the transaction
   * @param expireTime the number of seconds since 1970 for which this transaction is valid
   * @param sequenceId the unique sequence id obtainable from getNextSequenceId
   * @param signature the result of eth.sign on the operationHash sha3(toAddress, value, data, expireTime, sequenceId)
   */
  function sendMultiSig(address toAddress, uint value, bytes data, uint expireTime, uint sequenceId, bytes signature) onlysigner {
    // Verify the other signer
    var operationHash = sha3("ETHER", toAddress, value, data, expireTime, sequenceId);
    
    var otherSigner = verifyMultiSig(toAddress, operationHash, signature, expireTime, sequenceId);

    // Success, send the transaction
    if (!(toAddress.call.value(value)(data))) {
      // Failed executing transaction
      throw;
    }
    Transacted(msg.sender, otherSigner, operationHash, toAddress, value, data);
  }
  
  /**
   * Execute a multi-signature token transfer from this wallet using 2 signers: one from msg.sender and the other from ecrecover.
   * The signature is a signed form (using eth.sign) of tightly packed toAddress, value, tokenContractAddress, expireTime and sequenceId
   * Sequence IDs are numbers starting from 1. They are used to prevent replay attacks and may not be repeated.
   *
   * @param toAddress the destination address to send an outgoing transaction
   * @param value the amount in tokens to be sent
   * @param tokenContractAddress the address of the erc20 token contract
   * @param expireTime the number of seconds since 1970 for which this transaction is valid
   * @param sequenceId the unique sequence id obtainable from getNextSequenceId
   * @param signature the result of eth.sign on the operationHash sha3(toAddress, value, tokenContractAddress, expireTime, sequenceId)
   */
  function sendMultiSigToken(address toAddress, uint value, address tokenContractAddress, uint expireTime, uint sequenceId, bytes signature) onlysigner {
    // Verify the other signer
    var operationHash = sha3("ERC20", toAddress, value, tokenContractAddress, expireTime, sequenceId);
    
    var otherSigner = verifyMultiSig(toAddress, operationHash, signature, expireTime, sequenceId);
    
    ERC20Interface instance = ERC20Interface(tokenContractAddress);
    if (!instance.transfer(toAddress, value)) {
        throw;
    }
    TokenTransacted(msg.sender, otherSigner, operationHash, toAddress, value, tokenContractAddress);
  }

  /**
   * Execute a token flush from one of the forwarder addresses. This transfer needs only a single signature and can be done by any signer
   *
   * @param forwarderAddress the address of the forwarder address to flush the tokens from
   * @param tokenContractAddress the address of the erc20 token contract
   */
  function flushForwarderTokens(address forwarderAddress, address tokenContractAddress) onlysigner {    
    Forwarder forwarder = Forwarder(forwarderAddress);
    forwarder.flushTokens(tokenContractAddress);
  }  
  
  /**
   * Do common multisig verification for both eth sends and erc20token transfers
   *
   * @param toAddress the destination address to send an outgoing transaction
   * @param operationHash the sha3 of the toAddress, value, data/tokenContractAddress and expireTime
   * @param signature the tightly packed signature of r, s, and v as an array of 65 bytes (returned by eth.sign)
   * @param expireTime the number of seconds since 1970 for which this transaction is valid
   * @param sequenceId the unique sequence id obtainable from getNextSequenceId
   * returns address of the address to send tokens or eth to
   */
  function verifyMultiSig(address toAddress, bytes32 operationHash, bytes signature, uint expireTime, uint sequenceId) private returns (address) {

    var otherSigner = recoverAddressFromSignature(operationHash, signature);

    // Verify if we are in safe mode. In safe mode, the wallet can only send to signers
    if (safeMode && !isSigner(toAddress)) {
      // We are in safe mode and the toAddress is not a signer. Disallow!
      throw;
    }
    // Verify that the transaction has not expired
    if (expireTime < block.timestamp) {
      // Transaction expired
      throw;
    }

    // Try to insert the sequence ID. Will throw if the sequence id was invalid
    tryInsertSequenceId(sequenceId);

    if (!isSigner(otherSigner)) {
      // Other signer not on this wallet or operation does not match arguments
      throw;
    }
    if (otherSigner == msg.sender) {
      // Cannot approve own transaction
      throw;
    }

    return otherSigner;
  }

  /**
   * Irrevocably puts contract into safe mode. When in this mode, transactions may only be sent to signing addresses.
   */
  function activateSafeMode() onlysigner {
    safeMode = true;
    SafeModeActivated(msg.sender);
  }

  /**
   * Determine if an address is a signer on this wallet
   * @param signer address to check
   * returns boolean indicating whether address is signer or not
   */
  function isSigner(address signer) returns (bool) {
    // Iterate through all signers on the wallet and
    for (uint i = 0; i < signers.length; i++) {
      if (signers[i] == signer) {
        return true;
      }
    }
    return false;
  }

  /**
   * Gets the second signer's address using ecrecover
   * @param operationHash the sha3 of the toAddress, value, data/tokenContractAddress and expireTime
   * @param signature the tightly packed signature of r, s, and v as an array of 65 bytes (returned by eth.sign)
   * returns address recovered from the signature
   */
  function recoverAddressFromSignature(bytes32 operationHash, bytes signature) private returns (address) {
    if (signature.length != 65) {
      throw;
    }
    // We need to unpack the signature, which is given as an array of 65 bytes (from eth.sign)
    bytes32 r;
    bytes32 s;
    uint8 v;
    assembly {
      r := mload(add(signature, 32))
      s := mload(add(signature, 64))
      v := and(mload(add(signature, 65)), 255)
    }
    if (v < 27) {
      v += 27; // Ethereum versions are 27 or 28 as opposed to 0 or 1 which is submitted by some signing libs
    }
    return ecrecover(operationHash, v, r, s);
  }

  /**
   * Verify that the sequence id has not been used before and inserts it. Throws if the sequence ID was not accepted.
   * We collect a window of up to 10 recent sequence ids, and allow any sequence id that is not in the window and
   * greater than the minimum element in the window.
   * @param sequenceId to insert into array of stored ids
   */
  function tryInsertSequenceId(uint sequenceId) onlysigner private {
    // Keep a pointer to the lowest value element in the window
    uint lowestValueIndex = 0;
    for (uint i = 0; i < SEQUENCE_ID_WINDOW_SIZE; i++) {
      if (recentSequenceIds[i] == sequenceId) {
        // This sequence ID has been used before. Disallow!
        throw;
      }
      if (recentSequenceIds[i] < recentSequenceIds[lowestValueIndex]) {
        lowestValueIndex = i;
      }
    }
    if (sequenceId < recentSequenceIds[lowestValueIndex]) {
      // The sequence ID being used is lower than the lowest value in the window
      // so we cannot accept it as it may have been used before
      throw;
    }
    if (sequenceId > (recentSequenceIds[lowestValueIndex] + 10000)) {
      // Block sequence IDs which are much higher than the lowest value
      // This prevents people blocking the contract by using very large sequence IDs quickly
      throw;
    }
    recentSequenceIds[lowestValueIndex] = sequenceId;
  }

  /**
   * Gets the next available sequence ID for signing when using executeAndConfirm
   * returns the sequenceId one higher than the highest currently stored
   */
  function getNextSequenceId() returns (uint) {
    uint highestSequenceId = 0;
    for (uint i = 0; i < SEQUENCE_ID_WINDOW_SIZE; i++) {
      if (recentSequenceIds[i] > highestSequenceId) {
        highestSequenceId = recentSequenceIds[i];
      }
    }
    return highestSequenceId + 1;
  }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"parentAddress","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"tokenContractAddress","type":"address"}],"name":"flushTokens","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"flush","outputs":[],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"data","type":"bytes"}],"name":"ForwarderDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"tokenContractAddress","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"TokensFlushed","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052341561000f57600080fd5b5b60008054600160a060020a03191633600160a060020a03161790555b5b6103408061003c6000396000f3006060604052361561003a5763ffffffff60e060020a600035041662821de381146100eb5780633ef133671461011a5780636b9f96ea1461013b575b5b60008054600160a060020a0316903490366040518083838082843782019150509250505060006040518083038185876187965a03f192505050151561007f57600080fd5b7f69b31548dea9b3b707b4dff357d326e3e9348b24e7a6080a218a6edeeec48f9b3334600036604051600160a060020a0385168152602081018490526060604082018181529082018390526080820184848082843782019150509550505050505060405180910390a15b005b34156100f657600080fd5b6100fe610150565b604051600160a060020a03909116815260200160405180910390f35b341561012557600080fd5b6100e9600160a060020a036004351661015f565b005b341561014657600080fd5b6100e96102dc565b005b600054600160a060020a031681565b600080548190819033600160a060020a0390811691161461017f57600080fd5b83925030915082600160a060020a03166370a082318360006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156101dc57600080fd5b6102c65a03f115156101ed57600080fd5b5050506040518051915050801515610204576102d5565b60008054600160a060020a038086169263a9059cbb929091169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561026a57600080fd5b6102c65a03f1151561027b57600080fd5b50505060405180519050151561029057600080fd5b7f9401e4e79c19cbe2bd774cb70a94ba660e6718be1bac1298ab3b07f454a608218482604051600160a060020a03909216825260208201526040908101905180910390a15b5b50505050565b600054600160a060020a039081169030163160405160006040518083038185876187965a03f192505050151561031157600080fd5b5b5600a165627a7a72305820d0f8838ba17108a895d34ae8ef3bff4e0dc9d639c3c51921fee1d17eaa8037210029

   Swarm Source:
bzzr://d0f8838ba17108a895d34ae8ef3bff4e0dc9d639c3c51921fee1d17eaa803721

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.