// Dump everything known about a TX #include #include #include #include #include typedef GoogMap::Map TxMap; struct DumpTX:public Callback { optparse::OptionParser parser; bool dump; TxMap txMap; bool isGenTX; uint64_t bTime; uint64_t valueIn; uint64_t valueOut; uint64_t nbInputs; uint64_t nbOutputs; uint64_t currBlock; uint64_t nbDumped; const uint8_t *txStart; std::vector rootHashes; DumpTX() { parser .usage("[list of transaction hashes]") .version("") .description( "dumpp all the details of the list of specified transactions" ) .epilog("") ; } virtual const char *name() const { return "dumpTX"; } virtual const optparse::OptionParser *optionParser() const { return &parser; } virtual bool needTXHash() const { return true; } virtual void aliases( std::vector &v ) const { v.push_back("txinfo"); v.push_back("txshow"); v.push_back("showtx"); v.push_back("txdetails"); } virtual int init( int argc, const char *argv[] ) { nbDumped = 0; optparse::Values &values = parser.parse_args(argc, argv); auto args = parser.args(); for(size_t i=1; iheight; const uint8_t *p = b->data; SKIP(uint32_t, version, p); SKIP(uint256_t, prevBlkHash, p); SKIP(uint256_t, blkMerkleRoot, p); LOAD(uint32_t, blkTime, p); bTime = blkTime; } virtual void startTX( const uint8_t *p, const uint8_t *hash ) { txStart = p; nbInputs = 0; nbOutputs = 0; dump = (txMap.end()!=txMap.find(hash)); if(dump) { struct tm gmTime; time_t blockTime = bTime; gmtime_r(&blockTime, &gmTime); char timeBuf[256]; asctime_r(&gmTime, timeBuf); size_t sz =strlen(timeBuf); if(0