Estoy tratando de llegar a esta función:CTransaction getTxFromPrevout(COutPoint prevo);
La idea es... cuando una nueva transacción está a punto de ser validada, revisará todas tx.vin[i].prevout
y verificará los fondos ( utxo
).
Así que quiero encontrar e identificar el CTransaction tx
tal que tx.vout
(de tipo vector<CTxOut>
) tenga cualquier i
elemento tal que sea CScript
un pago normal ( tx.vout[i].scriptPubKey.IsNormalPayment() == true
) y tx.vout[i].scriptPubKey
tenga dentro una coincidencia para elprevo
Si uso un explorador web, puedo tomar prevo
y extraer el hash de él, luego buscar en la web el tx
... pero eso no me ayuda, ya que quiero poder usar esto dentro del código mismo, agregando esta nueva función. Intenté seguir el código en un explorador y usa la API de rpc, y no fue fácil de seguir.
Lo que estoy pensando es que debería haber una utxo
estructura o clase de base de datos que facilite el rastreo. Si supongo que hay una clase así nombrada UTxODatabase
, que sé que no la hay, pero imagínense que la hay, entonces la función que necesito codificar se vería así:
CTransaction UTxODatabase::getTxFromPrevout(COutPoint prevo);
/**************************************************** /
EDIT 1: puse esto al final de la función CheckTransaction(), enmain.cpp
BOOST_FOREACH (const CTxIn& txin, tx.vin){ std::cout << "txin.prevPubKey.ToString(): " << txin.prevPubKey.ToString() << std::endl;
Luego ejecuté la billetera y el resultado que se muestra para cada txin fue solo: txin.prevPubKey.ToString:
, sin ningún prevPubKey
dato. Estoy realmente confundido acerca de esto.
Mi pensamiento era que si puedo obtener esos prevPubKey
s del CTxIn
, entonces podré rastrear el utxo
. Pero, ¿por qué no habría información sobre ese miembro de la txin
en ese momento?
Creo que lo que quieres es usar esta función:
bool CCoinsViewMemPool::GetCoin(const COutPoint &outpoint, Coin &coin) const
Puede encontrar la definición aquí: https://github.com/bitcoin/bitcoin/blob/v0.17.0.1/src/txmempool.cpp#L885
Establecerá el Coin
objeto que pase como argumento. Para ver un ejemplo de uso, bool CheckSequenceLocks(const CTransaction &tx, int flags, LockPoints* lp, bool useExistingLockPoints)
consulte https://github.com/bitcoin/bitcoin/blob/v0.17.0.1/src/validation.cpp#L364
Se supone que esto "brinda acceso a todas las monedas que no se gastaron en el * base CCoinsView
, o son salidas de cualquier transacción de mempool".
txindex=1
y no podes.utxo
apunta cada uno de ellos.
JBaczuk
CCoinsView
clase encoins.h
, la funciónvirtual bool GetCoin(const COutPoint &outpoint, Coin &coin) const;
(o una de sus sobrecargas) podría hacer lo que necesita.galimba
virtual
calificador... la función principal a la que me hizo referencia fue:bool CCoinsView::GetCoins(const uint256& txid, CCoins& coins) const { return false; }
... simplemente devuelve falso. Esto parece estar en el camino correcto, aunque... y probablemente una de las otras implementaciones debería funcionar... como esta:bool CCoinsViewBacked::GetCoins(const uint256& txid, CCoins& coins) const { return base->GetCoins(txid, coins); }
Pero la verdad es que no estoy seguro de cómo usarlo. ¿Podría ser algo como esto?CTransaction CCoinsViewBacked::getTxFromPrevout(COutPoint prevo);