func: function trade( ERC20 sourceToken,
                      uint sourceAmount,
                      ERC20 destToken,
                      address destAddress,
                      bool validate ) payable returns(bool) {
  
          if( ! tradeEnabled ) {
              
              ErrorReport( tx.origin, 0x810000000, 0 );
              if( msg.value > 0 ) {
                  if( ! msg.sender.send(msg.value) ) throw;
              }
              return false;
          }
  
          if( msg.sender != kyberNetwork ) {
              
              ErrorReport( tx.origin, 0x810000001, uint(msg.sender) );
              if( msg.value > 0 ) {
                  if( ! msg.sender.send(msg.value) ) throw;
              }
  
              return false;
          }
  
          if( ! doTrade( sourceToken, sourceAmount, destToken, destAddress, validate ) ) {
              
              ErrorReport( tx.origin, 0x810000002, 0 );
              if( msg.value > 0 ) {
                  if( ! msg.sender.send(msg.value) ) throw;
              }
              return false;
          }
  
          ErrorReport( tx.origin, 0, 0 );
          return true;
      }