// The trade stores a copy of the Offer in string form. // This function verifies that offer against the trade, // and also verifies the signature on the offer. // // The Nym's ID is compared to offer's SenderNymID, and then the Signature // is checked // on the offer. It also compares the server ID, asset and currency IDs, // transaction #, etc // between this trade and the offer, in order to fully verify the offer's // authenticity. // bool OTTrade::VerifyOffer(OTOffer& offer) const { // At this point, I have a working, loaded, model of the Offer. // Let's verify the thing. if (GetTransactionNum() != offer.GetTransactionNum()) { otErr << "While verifying offer, failed matching transaction number.\n"; return false; } else if (GetNotaryID() != offer.GetNotaryID()) { otErr << "While verifying offer, failed matching Notary ID.\n"; return false; } else if (GetInstrumentDefinitionID() != offer.GetInstrumentDefinitionID()) { otErr << "While verifying offer, failed matching instrument definition " "ID.\n"; return false; } else if (GetCurrencyID() != offer.GetCurrencyID()) { otErr << "While verifying offer, failed matching currency type ID.\n"; return false; } // the Offer validates properly for this Trade. // return true; }
// This is called by the client side. First you call MakeOffer() to set up the // Offer, // then you call IssueTrade() and pass the Offer into it here. bool OTTrade::IssueTrade(OTOffer& offer, char stopSign, int64_t stopPrice) { // Make sure the Stop Sign is within parameters (0, '<', or '>') if ((stopSign == 0) || (stopSign == '<') || (stopSign == '>')) stopSign_ = stopSign; else { otErr << "Bad data in Stop Sign while issuing trade: " << stopSign << "\n"; return false; } // Make sure, if this IS a Stop order, that the price is within parameters // and set. if ((stopSign_ == '<') || (stopSign_ == '>')) { if (0 >= stopPrice) { otErr << "Expected Stop Price for trade.\n"; return false; } stopPrice_ = stopPrice; } tradesAlreadyDone_ = 0; SetCreationDate( OTTimeGetCurrentTime()); // This time is set to TODAY NOW (OTCronItem) // Validate the Notary ID, Instrument Definition ID, Currency Type ID, and // Date Range. if ((GetNotaryID() != offer.GetNotaryID()) || (GetCurrencyID() != offer.GetCurrencyID()) || (GetInstrumentDefinitionID() != offer.GetInstrumentDefinitionID()) || (offer.GetValidFrom() < OT_TIME_ZERO) || (offer.GetValidTo() < offer.GetValidFrom())) { return false; } // currencyTypeID_ // This is already set in the constructors of this // and the offer. (And compared.) // currencyAcctID_ // This is already set in the constructor of this. // Set the (now validated) date range as per the Offer. SetValidFrom(offer.GetValidFrom()); SetValidTo(offer.GetValidTo()); // Get the transaction number from the Offer. SetTransactionNum(offer.GetTransactionNum()); // Save a copy of the offer, in XML form, here on this Trade. String strOffer(offer); marketOffer_.Set(strOffer); return true; }