Ejemplo n.º 1
0
 /**
  * @param BloomFilter $filter
  * @return BufferInterface
  */
 public function serialize(BloomFilter $filter)
 {
     $math = new Math();
     $vBuf = [];
     foreach ($filter->getData() as $i) {
         $vBuf[] = Buffer::int($i, 1, $math);
     }
     return $this->getTemplate()->write([$vBuf, $filter->getNumHashFuncs(), $filter->getTweak(), (string) $filter->getFlags()]);
 }
Ejemplo n.º 2
0
 /**
  * @param BloomFilter $filter
  * @return FilteredBlock
  */
 public function filter(BloomFilter $filter)
 {
     $vMatch = [];
     $vHashes = [];
     foreach ($this->getTransactions() as $tx) {
         $vMatch[] = $filter->isRelevantAndUpdate($tx);
         $vHashes[] = $tx->getTxHash();
     }
     return new FilteredBlock($this->getHeader(), PartialMerkleTree::create(count($this->getTransactions()), $vHashes, $vMatch));
 }
Ejemplo n.º 3
0
 public function testNetworkSerialize()
 {
     $math = new Math();
     $factory = new Factory(Bitcoin::getDefaultNetwork(), new Random());
     $filter = BloomFilter::create($math, 10, 1.0E-6, 0, new Flags(BloomFilter::UPDATE_ALL));
     $filter->insertData(Buffer::hex('04943fdd508053c75000106d3bc6e2754dbcff19'));
     $filterload = $factory->filterload($filter);
     $serialized = $filterload->getNetworkMessage()->getBuffer();
     $parsed = $factory->parse(new Parser($serialized))->getPayload();
     $this->assertEquals($parsed, $filterload);
 }
Ejemplo n.º 4
0
 public function testMerkleBlock()
 {
     $factory = new Factory(NetworkFactory::bitcoin(), new Random());
     $hex = '0100000079cda856b143d9db2c1caff01d1aecc8630d30625d10e8b4b8b0000000000000b50cc069d6a3e33e3ff84a5c41d9d3febe7c770fdcc96b2c3ff60abe184f196367291b4d4c86041b8fa45d630101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff08044c86041b020a02ffffffff0100f2052a01000000434104ecd3229b0571c3be876feaac0442a9f13c5a572742927af1dc623353ecf8c202225f64868137a18cdd85cbbb4c74fbccfd4f49639cf1bdc94a5672bb15ad5d4cac00000000';
     $block = BlockFactory::fromHex($hex);
     $math = new Math();
     $filter = BloomFilter::create($math, 10, 1.0E-6, 0, new Flags(BloomFilter::UPDATE_ALL));
     $filter->insertHash('63194f18be0af63f2c6bc9dc0f777cbefed3d9415c4af83f3ee3a3d669c00cb5');
     // Check that Merkleblock message is serialized correctly
     $filtered = $block->filter($filter);
     $this->assertEquals($block->getHeader(), $filtered->getHeader());
     $merkle = $factory->merkleblock($filtered);
     $serialized = $merkle->getNetworkMessage()->getBuffer();
     $parsed = $factory->parse(new Parser($serialized))->getPayload();
     $this->assertEquals($merkle, $parsed);
 }
Ejemplo n.º 5
0
                    $filtered[] = '';
                }
            }
        }
    }
    if (count($blks) > 0 || count($filtered) > 0) {
        echo " [blocks: " . count($blks) . ", txs: " . count($txs) . ", filtered: " . count($filtered) . "]\n";
    }
}
$math = BitWasp\Bitcoin\Bitcoin::getMath();
$key = \BitWasp\Bitcoin\Key\Deterministic\HierarchicalKeyFactory::fromEntropy(new Buffer('this random sentence can be used to form a private key trololol123'));
$hd = $key->deriveChild(1);
$publicKey = $hd->getPublicKey();
echo $publicKey->getAddress()->getAddress() . "\n";
$flags = new Flags(BloomFilter::UPDATE_P2PUBKEY_ONLY);
$filter = BloomFilter::create($math, 1, 1, 1, $flags);
$filter->insertData($publicKey->getBuffer());
$loop = React\EventLoop\Factory::create();
$factory = new \BitWasp\Bitcoin\Networking\Factory($loop);
$dns = $factory->getDns();
$peerFactory = $factory->getPeerFactory($dns);
$host = $peerFactory->getAddress('192.168.192.101');
$local = $peerFactory->getAddress('192.168.192.39', 32301);
$peers = $peerFactory->getLocator();
$manager = $peerFactory->getManager($peers);
$manager->on('outbound', function (Peer $peer) use(&$node, $filter) {
    $locatorType = true;
    $peer->filterload($filter);
    $peer->mempool();
    $peer->on('inv', 'decodeInv');
    $peer->on('headers', function ($peer, \BitWasp\Bitcoin\Networking\Messages\Headers $headers) {