void move( const uint8_t *script, uint64_t scriptSize, const uint8_t *txHash, int64_t value, const uint8_t *downTXHash = 0 ) { uint8_t addrType[3]; uint160_t pubKeyHash; int type = solveOutputScript(pubKeyHash.v, script, scriptSize, addrType); if(unlikely(type<0)) return; Addr *addr; auto i = addrMap.find(pubKeyHash.v); if(unlikely(addrMap.end()!=i)) addr = i->second; else { addr = allocAddr(); memcpy(addr->hash.v, pubKeyHash.v, kRIPEMD160ByteSize); addr->sum = 0; addrMap[addr->hash.v] = addr; allAddrs.push_back(addr); } addr->lastTouched = blockTime; addr->sum += value; static uint64_t cnt = 0; if(unlikely(0==((cnt++)&0xFFFFF))) { if( curBlock && lastBlock && firstBlock ) { double progress = curBlock->height/(double)lastBlock->height; info( "%8" PRIu64 " blocks, " "%8.3f MegaMoves , " "%8.3f MegaAddrs , " "%5.2f%%", curBlock->height, cnt*1e-6, addrMap.size()*1e-6, 100.0*progress ); } } }
void move( const uint8_t *script, uint64_t scriptSize, const uint8_t *upTXHash, int64_t outputIndex, int64_t value, const uint8_t *downTXHash = 0, uint64_t inputIndex = -1 ) { uint8_t addrType[3]; uint160_t pubKeyHash; int type = solveOutputScript(pubKeyHash.v, script, scriptSize, addrType); if(unlikely(type<0)) return; if(0!=restrictMap.size()) { auto r = restrictMap.find(pubKeyHash.v); if(restrictMap.end()==r) { return; } } Addr *addr; auto i = addrMap.find(pubKeyHash.v); if(unlikely(addrMap.end()!=i)) { addr = i->second; } else { addr = allocAddr(); memcpy(addr->hash.v, pubKeyHash.v, kRIPEMD160ByteSize); addr->outputVec = 0; addr->nbOut = 0; addr->nbIn = 0; addr->sum = 0; if(detailed) { addr->outputVec = new OutputVec; } addrMap[addr->hash.v] = addr; allAddrs.push_back(addr); } if(0<value) { addr->lastIn = blockTime; ++(addr->nbIn); } else { addr->lastOut = blockTime; ++(addr->nbOut); } addr->sum += value; if(detailed) { struct Output output; output.value = value; output.time = blockTime; output.upTXHash = upTXHash; output.downTXHash = downTXHash; output.inputIndex = inputIndex; output.outputIndex = outputIndex; addr->outputVec->push_back(output); } }