Sponsored Link:   Ambrosus Main-Net Launching: Stake AMB in Masternodes and get regular rewards for maintaining network integrity.
Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 34 txns
 Latest 25 txns from a total Of 34 transactions

TxHash Age From To Value [TxFee]
0xda81a8acaec92e6d945d2307268e4efdf5b2bebcd5623ca5adaea0e96546bd7e9 hrs 16 mins agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050113694078039 Ether0.000033705
0x840c33fbb60fe2c1cac98be671642b0a9ad486a14bee8ccd8b9884731ee5d7394 days 13 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050088501660854 Ether0.000033705
0xd9e044e504fd9cdce68f42b9ab2cdc22b9cf5cda37584ded434405255b85f4739 days 7 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050091723712797 Ether0.000033705
0xaf2e437db0d76a78a5e182a8a27cf09cb81f6ffc45e71eaa5039fa38d950863313 days 5 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050198600470618 Ether0.000033705
0xbb364f6ddb7c05206627ce2a6e105b107d1e6823ce735f5c3b9967e63c3f9b6b17 days 6 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050211899335919 Ether0.000033705
0xfe9ad41176f25dc91162d1c5a84e0783332f6e812796b4b8972d76bfd762871021 days 12 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050116590573809 Ether0.000033705
0x6a8c93b51bc51436cf6c0dcf0b0f49bed928092e1344e4bc009fda27e7b43a1325 days 23 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050025461117457 Ether0.000033705
0x282cdfa66c33d0609e7650542d340b1ee5a106b368e7fc66e9aa99dc1376a06530 days 22 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050135713973531 Ether0.000033705
0x32ac9b04081e5b86bc8b68fb4d7c6e54bd460451c4337b5682d88bb086149ca935 days 59 mins agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050140647678088 Ether0.000033705
0x54f872311b08c2f6eeb3a1d3e4fa9c0ee734339567cd4b5be4adf09e61f1661839 days 6 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050122405161015 Ether0.000033705
0x00abb97686853836c8ab34567cf0749da45b9b17cd91a9712a1adb5eed07bfe443 days 6 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050057893985983 Ether0.000033705
0x6d4df789ff1127a1d830998a5da87ca3de0240df2213d7dc08f6fabd7ba5baed46 days 22 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050135192192926 Ether0.000033705
0xe16e8de17352eef0fcd6294e194d243cd3a5c443bc6e1c6482b07fb1aec2d05d51 days 12 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050143980100255 Ether0.000033705
0xd1816966b5b1d460095c072d90209c2d9bd7caebdb04112e9a4c083dfbf47d8a56 days 37 mins agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050242294295776 Ether0.000033705
0x22f2e2e358fde594e64bd0126d657921023c61766b74ca18d06834aa638cfda659 days 19 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050232495701027 Ether0.000033705
0x9beb1a34d1c6f3cde3977f320161a1ef3b6db6c9b58554a86e44a87301c8512d63 days 16 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050153020283927 Ether0.000033705
0xee9c2dec0ef709187046bf996fac5b403f8ba7e6b15d4dca9af9c81c6726f8c567 days 11 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050101132906033 Ether0.000033705
0xdbe80f8bbdfe0da234af882abdd1e84583b6a166d6e4939bb98e4abd55115cc371 days 5 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050315680823738 Ether0.000033705
0xe6396c645243ff4e240f6071b3b0f32d6f33b3456b0e244ab2ee082c72ce83f374 days 22 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050040428911576 Ether0.000033705
0x530eafc056069a9395829bb01c41703ea4801ecca4d05ad4131b067438c6bff178 days 14 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050341034624801 Ether0.000033705
0xe0301045f8834b116e3edbed6568ed1068ae0aba7e3d46eabe2d8610ad6bcbd682 days 5 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050175284171479 Ether0.000033705
0xf2fa861bc2c847f5daef23ab4c6f25cbd39bdf7e28d6da7b22c266ee1b593e2a85 days 22 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050022969328278 Ether0.000033705
0x6e2cded70a6b02873d7991ef559ed2abf576dd9f68f73f7bf79b43c9c3305f0e89 days 14 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050073427016041 Ether0.000033705
0xed81101abb4a7c526e8a3d76345ee326c64f2f1ab1c28fa6cf323cbfaa76d93d93 days 2 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050129691664849 Ether0.000033705
0x3084679a84328ef4cd397d8be43558725b581689cedc8738f696d3f0b7bee5f196 days 18 hrs agoNanopool  IN  0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0.050163763752256 Ether0.000033705
[ 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
0xda81a8acaec92e6d945d2307268e4efdf5b2bebcd5623ca5adaea0e96546bd7e59906059 hrs 16 mins ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.0501136940780396 Ether
0x840c33fbb60fe2c1cac98be671642b0a9ad486a14bee8ccd8b9884731ee5d73959661264 days 13 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.0500885016608548 Ether
0xd9e044e504fd9cdce68f42b9ab2cdc22b9cf5cda37584ded434405255b85f47359378519 days 7 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.050091723712797296 Ether
0xaf2e437db0d76a78a5e182a8a27cf09cb81f6ffc45e71eaa5039fa38d9508633591514013 days 5 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.050198600470618904 Ether
0xbb364f6ddb7c05206627ce2a6e105b107d1e6823ce735f5c3b9967e63c3f9b6b589167217 days 6 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.0502118993359198 Ether
0xfe9ad41176f25dc91162d1c5a84e0783332f6e812796b4b8972d76bfd7628710586675121 days 12 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.050116590573809096 Ether
0x6a8c93b51bc51436cf6c0dcf0b0f49bed928092e1344e4bc009fda27e7b43a13584079825 days 23 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.050025461117457 Ether
0x282cdfa66c33d0609e7650542d340b1ee5a106b368e7fc66e9aa99dc1376a065581185830 days 22 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.050135713973531304 Ether
0x32ac9b04081e5b86bc8b68fb4d7c6e54bd460451c4337b5682d88bb086149ca9578785435 days 59 mins ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.050140647678088904 Ether
0x54f872311b08c2f6eeb3a1d3e4fa9c0ee734339567cd4b5be4adf09e61f16618576373639 days 6 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.050122405161015304 Ether
0x00abb97686853836c8ab34567cf0749da45b9b17cd91a9712a1adb5eed07bfe4574124443 days 6 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.050057893985983504 Ether
0x6d4df789ff1127a1d830998a5da87ca3de0240df2213d7dc08f6fabd7ba5baed572066646 days 22 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.050135192192926696 Ether
0xe16e8de17352eef0fcd6294e194d243cd3a5c443bc6e1c6482b07fb1aec2d05d569487551 days 12 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.0501439801002556 Ether
0xd1816966b5b1d460095c072d90209c2d9bd7caebdb04112e9a4c083dfbf47d8a566920656 days 37 mins ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.0502422942957764 Ether
0x22f2e2e358fde594e64bd0126d657921023c61766b74ca18d06834aa638cfda6564796959 days 19 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.0502324957010276 Ether
0x9beb1a34d1c6f3cde3977f320161a1ef3b6db6c9b58554a86e44a87301c8512d562599063 days 16 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.050153020283927904 Ether
0xee9c2dec0ef709187046bf996fac5b403f8ba7e6b15d4dca9af9c81c6726f8c5560444467 days 11 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.050101132906033696 Ether
0xdbe80f8bbdfe0da234af882abdd1e84583b6a166d6e4939bb98e4abd55115cc3558291171 days 5 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.0503156808237384 Ether
0xe6396c645243ff4e240f6071b3b0f32d6f33b3456b0e244ab2ee082c72ce83f3556151874 days 22 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.050040428911576096 Ether
0x530eafc056069a9395829bb01c41703ea4801ecca4d05ad4131b067438c6bff1554073778 days 14 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.050341034624801096 Ether
0xe0301045f8834b116e3edbed6568ed1068ae0aba7e3d46eabe2d8610ad6bcbd6551991982 days 5 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.0501752841714792 Ether
0xf2fa861bc2c847f5daef23ab4c6f25cbd39bdf7e28d6da7b22c266ee1b593e2a549842485 days 22 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.050022969328278896 Ether
0x6e2cded70a6b02873d7991ef559ed2abf576dd9f68f73f7bf79b43c9c3305f0e547723989 days 14 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.0500734270160416 Ether
0xed81101abb4a7c526e8a3d76345ee326c64f2f1ab1c28fa6cf323cbfaa76d93d545696193 days 2 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.050129691664849904 Ether
0x3084679a84328ef4cd397d8be43558725b581689cedc8738f696d3f0b7bee5f1543513396 days 18 hrs ago0xa0adc5a0b6015806bb3920b9a2a226ab2a211c8c0x131a99859a8bfa3251d899f0675607766736ffae0.050163763752256504 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.