Ich versuche, diese Funktion zu finden:CTransaction getTxFromPrevout(COutPoint prevo);
Die Idee ist ... wenn eine neue Transaktion validiert werden soll, wird sie alle durchlaufen tx.vin[i].prevout
und auf Geldmittel prüfen ( utxo
).
Also möchte ich das finden und identifizieren, CTransaction tx
das tx.vout
(vom Typ vector<CTxOut>
) ein beliebiges i
Element hat, so dass es sich CScript
um eine normale Zahlung ( tx.vout[i].scriptPubKey.IsNormalPayment() == true
) handelt und das tx.vout[i].scriptPubKey
eine Übereinstimmung für das enthältprevo
Wenn ich einen webbasierten Explorer verwende, kann ich die nehmen prevo
und den Hash daraus extrahieren, dann im Web nach der suchen tx
... aber das hilft mir nicht, da ich dies innerhalb des Codes selbst verwenden möchte, indem ich hinzufüge diese neue Funktion. Ich habe versucht, dem Code in einem Explorer zu folgen, und er verwendet die RPC-API, und es war nicht einfach, ihm zu folgen.
Was ich denke, ist, dass es eine utxo
Datenbankstruktur oder -klasse geben sollte, die das Crawlen erleichtert. Wenn ich annehme, dass es eine solche Klasse mit dem Namen gibt UTxODatabase
- von der ich weiß, dass es keine gibt, aber stellen Sie sich vor, dass es eine gibt -, dann würde die Funktion, die ich codieren muss, so aussehen:
CTransaction UTxODatabase::getTxFromPrevout(COutPoint prevo);
/**************************************************** /
BEARBEITEN 1: Ich habe dies ganz am Ende der Funktion CheckTransaction() eingefügt, inmain.cpp
BOOST_FOREACH (const CTxIn& txin, tx.vin){ std::cout << "txin.prevPubKey.ToString(): " << txin.prevPubKey.ToString() << std::endl;
Dann habe ich die Brieftasche ausgeführt und die für jedes txin angezeigte Ausgabe war nur: txin.prevPubKey.ToString:
, ohne prevPubKey
Daten. Ich bin wirklich verwirrt darüber.
prevPubKey
Mein Gedanke war, dass ich, wenn ich in der Lage bin, diese s von der zu erhalten CTxIn
, auch in der Lage sein werde, die zu verfolgen utxo
. txin
Aber warum sollte es zu diesem Zeitpunkt keine Informationen über dieses Mitglied der geben ?
Ich denke, was Sie wollen, ist diese Funktion zu verwenden:
bool CCoinsViewMemPool::GetCoin(const COutPoint &outpoint, Coin &coin) const
Die Definition finden Sie hier: https://github.com/bitcoin/bitcoin/blob/v0.17.0.1/src/txmempool.cpp#L885
Es wird das Coin
Objekt setzen, das Sie als Argument übergeben. Ein Anwendungsbeispiel finden Sie bool CheckSequenceLocks(const CTransaction &tx, int flags, LockPoints* lp, bool useExistingLockPoints)
unter https://github.com/bitcoin/bitcoin/blob/v0.17.0.1/src/validation.cpp#L364
Dies soll "Zugriff auf alle Coins bieten, die entweder nicht in der * base CCoinsView
, ausgegeben werden oder aus einer Mempool-Transaktion stammen".
txindex=1
und keinen Schnitt.utxo
zeigt.
JBaczuk
CCoinsView
Klasse incoins.h
, die Funktionvirtual bool GetCoin(const COutPoint &outpoint, Coin &coin) const;
(oder eine ihrer Überladungen) könnte das tun, was Sie brauchen.Galimba
virtual
Qualifizierer ... die Hauptfunktion, auf die Sie mich verwiesen haben, war:bool CCoinsView::GetCoins(const uint256& txid, CCoins& coins) const { return false; }
... sie gibt nur falsch zurück. Das scheint auf dem richtigen Weg zu sein, aber ... und wahrscheinlich sollte eine der anderen Implementierungen funktionieren ... wie diese:bool CCoinsViewBacked::GetCoins(const uint256& txid, CCoins& coins) const { return base->GetCoins(txid, coins); }
Aber die Wahrheit ist, ich bin mir nicht sicher, wie ich es benutzen soll. Könnte so etwas sein?CTransaction CCoinsViewBacked::getTxFromPrevout(COutPoint prevo);