Ejemplo n.º 1
0
function decodeInv(Peer $peer, \BitWasp\Bitcoin\Networking\Messages\Inv $inv)
{
    $txs = [];
    $filtered = [];
    $blks = [];
    foreach ($inv->getItems() as $item) {
        $loc = null;
        if ($item->isBlock()) {
            $loc =& $blks;
        } else {
            if ($item->isTx()) {
                $loc =& $txs;
            } else {
                if ($item->isFilteredBlock()) {
                    $loc =& $filtered;
                }
            }
        }
        $loc[] = $item->getHash();
    }
    echo " [txs: " . count($txs) . ", blocks: " . count($blks) . ", filtered: " . count($filtered) . "]\n";
}
Ejemplo n.º 2
0
function decodeInv(Peer $peer, \BitWasp\Bitcoin\Networking\Messages\Inv $inv)
{
    $txs = [];
    $filtered = [];
    $blks = [];
    foreach ($inv->getItems() as $item) {
        if ($item->isBlock()) {
            $blks[] = '';
        } else {
            if ($item->isTx()) {
                $txs[] = '';
            } else {
                if ($item->isFilteredBlock()) {
                    $filtered[] = '';
                }
            }
        }
    }
    if (count($blks) > 0 || count($filtered) > 0) {
        echo " [blocks: " . count($blks) . ", txs: " . count($txs) . ", filtered: " . count($filtered) . "]\n";
    }
}
Ejemplo n.º 3
0
 /**
  * @param PeerState $state
  * @param Peer $peer
  * @param Inv $inv
  */
 public function onInv(PeerState $state, Peer $peer, Inv $inv)
 {
     $txs = [];
     $blocks = [];
     $filtered = [];
     foreach ($inv->getItems() as $item) {
         if ($item->isBlock()) {
             $blocks[] = $item;
         } elseif ($item->isTx()) {
             $txs[] = $item;
         } elseif ($item->isFilteredBlock()) {
             $filtered[] = $item;
         }
     }
     if (count($blocks) > 0) {
         $this->emit('blocks', [$state, $peer, $blocks]);
     }
     if (count($txs) > 0) {
         $this->emit('transactions', [$state, $peer, $txs]);
     }
     if (count($filtered) > 0) {
         $this->emit('filtered', [$state, $peer, $filtered]);
     }
 }
Ejemplo n.º 4
0
 /**
  * @param Peer $peer
  * @param Inv $inv
  */
 public function onInv(Peer $peer, Inv $inv)
 {
     $count = count($inv->getItems());
     $request = [];
     for ($i = 0; $i < $count; $i++) {
         $item = $inv->getItem($i);
         $hash = $item->getHash()->getBinary();
         array_push($this->inventory, $hash);
         $request[] = $item;
     }
     if (count($request)) {
         echo "GET " . count($request) . " txs \n";
         $peer->getdata($request);
     }
 }
Ejemplo n.º 5
0
 /**
  * @param Inv $inv
  * @return \BitWasp\Buffertools\Buffer
  */
 public function serialize(Inv $inv)
 {
     return $this->getTemplate()->write([$inv->getItems()]);
 }
Ejemplo n.º 6
0
 /**
  * @param Peer $peer
  * @param Inv $inv
  */
 public function onInv(Peer $peer, Inv $inv)
 {
     echo 'INV size: ' . count($inv->getItems()) . PHP_EOL;
     $best = $this->chain();
     $vFetch = [];
     $blocks = [];
     foreach ($inv->getItems() as $item) {
         if ($item->isBlock()) {
             $blocks[] = $item;
         } else {
             $vFetch[] = $item;
         }
     }
     if (count($blocks) !== 0) {
         $blockView = $best->bestBlocksCache();
         $this->blockDownload->advertised($best, $blockView, $peer, $blocks);
     }
     if (count($vFetch) !== 0) {
         $peer->getdata($vFetch);
     }
 }