void Peer::recvTransaction(StellarMessage const& msg) { TransactionFramePtr transaction = TransactionFrame::makeTransactionFromWire( mApp.getNetworkID(), msg.transaction()); if (transaction) { // add it to our current set // and make sure it is valid auto recvRes = mApp.getHerder().recvTransaction(transaction); if (recvRes == Herder::TX_STATUS_PENDING || recvRes == Herder::TX_STATUS_DUPLICATE) { // record that this peer sent us this transaction mApp.getOverlayManager().recvFloodedMsg(msg, shared_from_this()); if (recvRes == Herder::TX_STATUS_PENDING) { // if it's a new transaction, broadcast it mApp.getOverlayManager().broadcastMessage(msg); } } } }
StellarMessage TransactionFrame::toStellarMessage() const { StellarMessage msg; msg.type(TRANSACTION); msg.transaction() = mEnvelope; return msg; }
Herder::TransactionSubmitStatus LoadGenerator::TxInfo::execute(Application& app, bool isCreate, TransactionResultCode& code, int32_t batchSize) { auto seqNum = mFrom->getLastSequenceNumber(); mFrom->setSequenceNumber(seqNum + 1); TransactionFramePtr txf = transactionFromOperations(app, mFrom->getSecretKey(), seqNum + 1, mOps); TxMetrics txm(app.getMetrics()); // Record tx metrics. if (isCreate) { while (batchSize--) { txm.mAccountCreated.Mark(); } } else { txm.mPayment.Mark(); txm.mNativePayment.Mark(); } txm.mTxnAttempted.Mark(); StellarMessage msg; msg.type(TRANSACTION); msg.transaction() = txf->getEnvelope(); txm.mTxnBytes.Mark(xdr::xdr_argpack_size(msg)); auto status = app.getHerder().recvTransaction(txf); if (status != Herder::TX_STATUS_PENDING) { CLOG(INFO, "LoadGen") << "tx rejected '" << Herder::TX_STATUS_STRING[status] << "': " << xdr::xdr_to_string(txf->getEnvelope()) << " ===> " << xdr::xdr_to_string(txf->getResult()); if (status == Herder::TX_STATUS_ERROR) { code = txf->getResultCode(); } txm.mTxnRejected.Mark(); } else { app.getOverlayManager().broadcastMessage(msg); } return status; }
void Peer::recvTransaction(StellarMessage const& msg) { TransactionFramePtr transaction = TransactionFrame::makeTransactionFromWire(msg.transaction()); if (transaction) { // add it to our current set // and make sure it is valid if (mApp.getHerder().recvTransaction(transaction)) { mApp.getOverlayManager().recvFloodedMsg(msg, shared_from_this()); mApp.getOverlayManager().broadcastMessage(msg); } } }