mirror of
https://github.com/wownero/wownero-cpp.git
synced 2026-10-17 23:31:32 +02:00
ready to implement tx wallet copy()
This commit is contained in:
@@ -177,7 +177,58 @@ namespace monero {
|
||||
|
||||
shared_ptr<MoneroTx> MoneroTx::copy(const shared_ptr<MoneroTx>& src, const shared_ptr<MoneroTx>& tgt) const {
|
||||
MTRACE("MoneroTx::copy(const shared_ptr<MoneroTx>& src, const shared_ptr<MoneroTx>& tgt)");
|
||||
throw runtime_error("MoneroTx::copy() not implemented");
|
||||
tgt->id = src->id;
|
||||
tgt->version = src->version;
|
||||
tgt->isCoinbase = src->isCoinbase;
|
||||
tgt->paymentId = src->paymentId;
|
||||
tgt->fee = src->fee;
|
||||
tgt->mixin = src->mixin;
|
||||
tgt->doNotRelay = src->doNotRelay;
|
||||
tgt->isRelayed = src->isRelayed;
|
||||
tgt->isConfirmed = src->isConfirmed;
|
||||
tgt->inTxPool = src->inTxPool;
|
||||
tgt->numConfirmations = src->numConfirmations;
|
||||
tgt->unlockTime = src->unlockTime;
|
||||
tgt->lastRelayedTimestamp = src->lastRelayedTimestamp;
|
||||
tgt->receivedTimestamp = src->receivedTimestamp;
|
||||
tgt->isDoubleSpendSeen = src->isDoubleSpendSeen;
|
||||
tgt->key = src->key;
|
||||
tgt->fullHex = src->fullHex;
|
||||
tgt->prunedHex = src->prunedHex;
|
||||
tgt->prunableHex = src->prunableHex;
|
||||
tgt->prunableHash = src->prunableHash;
|
||||
tgt->size = src->size;
|
||||
tgt->weight = src->weight;
|
||||
if (!src->vins.empty()) {
|
||||
tgt->vins = vector<shared_ptr<MoneroOutput>>();
|
||||
for (const shared_ptr<MoneroOutput>& vin : src->vins) {
|
||||
shared_ptr<MoneroOutput> vinCopy = vin->copy(vin, shared_ptr<MoneroOutput>());
|
||||
vinCopy->tx = tgt;
|
||||
tgt->vins.push_back(vinCopy);
|
||||
}
|
||||
}
|
||||
if (!src->vouts.empty()) {
|
||||
tgt->vouts = vector<shared_ptr<MoneroOutput>>();
|
||||
for (const shared_ptr<MoneroOutput>& vout : src->vouts) {
|
||||
shared_ptr<MoneroOutput> voutCopy = vout->copy(vout, shared_ptr<MoneroOutput>());
|
||||
voutCopy->tx = tgt;
|
||||
tgt->vouts.push_back(voutCopy);
|
||||
}
|
||||
}
|
||||
if (!src->outputIndices.empty()) tgt->outputIndices = vector<uint32_t>(src->outputIndices);
|
||||
tgt->metadata = src->metadata;
|
||||
tgt->commonTxSets = src->commonTxSets;
|
||||
if (!src->extra.empty()) throw runtime_error("extra deep copy not implemented"); // TODO: implement extra
|
||||
tgt->rctSignatures = src->rctSignatures;
|
||||
tgt->rctSigPrunable = src->rctSigPrunable;
|
||||
tgt->isKeptByBlock = src->isKeptByBlock;
|
||||
tgt->isFailed = src->isFailed;
|
||||
tgt->lastFailedHeight = src->lastFailedHeight;
|
||||
tgt->lastFailedId = src->lastFailedId;
|
||||
tgt->maxUsedBlockHeight = src->maxUsedBlockHeight;
|
||||
tgt->maxUsedBlockId = src->maxUsedBlockId;
|
||||
if (!src->signatures.empty()) tgt->signatures = vector<string>(src->signatures);
|
||||
return tgt;
|
||||
}
|
||||
|
||||
boost::property_tree::ptree MoneroTx::toPropertyTree() const {
|
||||
|
||||
@@ -1384,45 +1384,26 @@ namespace monero {
|
||||
MTRACE("MoneroWallet::getTransfers(request)");
|
||||
|
||||
// LOG request
|
||||
MTRACE("Transfer request: " << request.serialize());
|
||||
if (request.txRequest != boost::none) {
|
||||
if ((*request.txRequest)->block == boost::none) MTRACE("Transfer request's tx request rooted at [tx]:" << (*request.txRequest)->serialize());
|
||||
else MTRACE("Transfer request's tx request rooted at [block]: " << (*(*request.txRequest)->block)->serialize());
|
||||
}
|
||||
|
||||
// copy and normalize request
|
||||
MTRACE("initializing shared pointer");
|
||||
shared_ptr<MoneroTransferRequest> req;
|
||||
if (request.txRequest == boost::none) {
|
||||
MTRACE("copying transfer request");
|
||||
req = request.copy(make_shared<MoneroTransferRequest>(request), shared_ptr<MoneroTransferRequest>());
|
||||
MTRACE("done copying request!!!");
|
||||
}
|
||||
if (request.txRequest == boost::none) req = request.copy(make_shared<MoneroTransferRequest>(request), make_shared<MoneroTransferRequest>());
|
||||
else {
|
||||
MTRACE("copying tx request");
|
||||
shared_ptr<MoneroTxRequest> txReq = request.txRequest.get()->copy(request.txRequest.get(), shared_ptr<MoneroTxRequest>());
|
||||
MTRACE("1");
|
||||
if (request.txRequest.get()->transferRequest.get().get() == &request) {
|
||||
req = txReq->transferRequest.get();
|
||||
MTRACE("2");
|
||||
}
|
||||
shared_ptr<MoneroTxRequest> txReq = request.txRequest.get()->copy(request.txRequest.get(), make_shared<MoneroTxRequest>());
|
||||
if (request.txRequest.get()->transferRequest.get().get() == &request) req = txReq->transferRequest.get();
|
||||
else {
|
||||
MTRACE("3");
|
||||
if (request.txRequest.get()->transferRequest != boost::none) throw new runtime_error("Transfer request's tx request must be a circular reference or null");
|
||||
MTRACE("4");
|
||||
req = request.copy(make_shared<MoneroTransferRequest>(request), shared_ptr<MoneroTransferRequest>());
|
||||
MTRACE("5");
|
||||
req = request.copy(make_shared<MoneroTransferRequest>(request), make_shared<MoneroTransferRequest>());
|
||||
req->txRequest = txReq;
|
||||
MTRACE("6");
|
||||
}
|
||||
}
|
||||
MTRACE("7");
|
||||
if (req->txRequest == boost::none) req->txRequest = shared_ptr<MoneroTxRequest>();
|
||||
MTRACE("8");
|
||||
if (req->txRequest == boost::none) req->txRequest = make_shared<MoneroTxRequest>();
|
||||
shared_ptr<MoneroTxRequest> txReq = req->txRequest.get();
|
||||
MTRACE("9");
|
||||
txReq->transferRequest = boost::none; // break circular link for meetsCriteria()
|
||||
MTRACE("10");
|
||||
|
||||
// // copy and normalize request
|
||||
// MoneroTransferRequest req;
|
||||
|
||||
@@ -106,6 +106,9 @@ namespace monero {
|
||||
// --------------------------- MONERO TX WALLET -----------------------------
|
||||
|
||||
shared_ptr<MoneroTxWallet> MoneroTxWallet::copy(const shared_ptr<MoneroTx>& src, const shared_ptr<MoneroTx>& tgt) const {
|
||||
MTRACE("MoneroTxWallet::copy(const shared_ptr<MoneroTx>& src, const shared_ptr<MoneroTx>& tgt)");
|
||||
MTRACE("src: " << src);
|
||||
MTRACE("tgt: " << tgt);
|
||||
return MoneroTxWallet::copy(static_pointer_cast<MoneroTxWallet>(src), static_pointer_cast<MoneroTxWallet>(tgt));
|
||||
};
|
||||
|
||||
@@ -116,7 +119,10 @@ namespace monero {
|
||||
// copy base class
|
||||
MoneroTx::copy(static_pointer_cast<MoneroTx>(src), static_pointer_cast<MoneroTx>(tgt));
|
||||
|
||||
// copy wallet extensions
|
||||
throw runtime_error("MoneroTxWallet::copy(txWallet) not implemented");
|
||||
|
||||
return tgt;
|
||||
};
|
||||
|
||||
boost::property_tree::ptree MoneroTxWallet::toPropertyTree() const {
|
||||
@@ -177,6 +183,8 @@ namespace monero {
|
||||
|
||||
shared_ptr<MoneroTxRequest> MoneroTxRequest::copy(const shared_ptr<MoneroTxRequest>& src, const shared_ptr<MoneroTxRequest>& tgt) const {
|
||||
MTRACE("MoneroTxRequest::copy(const shared_ptr<MoneroTxRequest>& src, const shared_ptr<MoneroTxRequest>& tgt)");
|
||||
MTRACE("src: " << src);
|
||||
MTRACE("tgt: " << tgt);
|
||||
if (this != src.get()) throw runtime_error("this != src");
|
||||
|
||||
// copy base class
|
||||
|
||||
Reference in New Issue
Block a user