protected function initPeerConnector() { $factory = new \BitWasp\Bitcoin\Networking\Factory($this->loop); $this->peer_factory = $factory->getPeerFactory($factory->getDns()); $this->host = $this->peer_factory->getAddress(gethostbyname(getenv('BITCOIND_HOST')), getenv('BITCOIND_PORT')); $this->connector = $this->peer_factory->getConnector(); }
public function testListener() { $hadInbound = false; $hadOutbound = false; $inbndPeer = null; $loop = new \React\EventLoop\StreamSelectLoop(); $factory = new \BitWasp\Bitcoin\Networking\Factory($loop); $peerFactory = $factory->getPeerFactory($factory->getDns()); $serverAddr = $peerFactory->getAddress('127.0.0.1', 31234); $server = $peerFactory->getServer(); $listener = $peerFactory->getListener($server); $listener->on('connection', function (Peer $peer) use(&$hadInbound, $listener, &$inbndPeer) { $hadInbound = true; $inbndPeer = $peer; $listener->close(); }); $listener->listen($serverAddr->getPort()); $peerFactory->getPeer()->connect($peerFactory->getConnector(), $serverAddr)->then(function (Peer $peer) use(&$hadOutbound) { $hadOutbound = true; $peer->close(); }); $loop->run(); $this->assertTrue($hadInbound); $this->assertTrue($hadOutbound); $this->assertInstanceOf('BitWasp\\Bitcoin\\Networking\\Peer\\Peer', $inbndPeer); }
/** * @param InputInterface $input * @param OutputInterface $output * @return int */ protected function execute(InputInterface $input, OutputInterface $output) { $loop = \React\EventLoop\Factory::create(); $factory = new \BitWasp\Bitcoin\Networking\Factory($loop); $dns = $factory->getDns(); $peerFactory = $factory->getPeerFactory($dns); $timeout = $input->getOption('timeout'); $host = $peerFactory->getAddress($input->getArgument('host')); $deferred = new \React\Promise\Deferred(); $peer = $peerFactory->getPeer(); $peer->on('version', function (Peer $peer, Version $ver) use($deferred) { $deferred->resolve([$peer, $ver]); }); $deferred->promise()->then(function ($arr) use($loop, $output, &$userHost) { list(, $msg) = $arr; $loop->stop(); $this->renderVersion($output, $userHost, $msg); }); $loop->addPeriodicTimer($timeout, function (Timer $timer) use($loop, $output, &$userHost) { $loop->stop(); $timer->cancel(); $this->renderTimeout($output, $userHost); }); $peer->connect($peerFactory->getConnector(), $host); $loop->run(); return 0; }
/** * @expectedException \Exception */ public function testConnectingNoPeers() { $loop = new \React\EventLoop\StreamSelectLoop(); $factory = new \BitWasp\Bitcoin\Networking\Factory($loop); $peerFactory = $factory->getPeerFactory($factory->getDns()); $locator = $peerFactory->getLocator(); $locator->popAddress(); }
/** * @expectedException \Exception */ public function testReset() { $loop = new \React\EventLoop\StreamSelectLoop(); $factory = new \BitWasp\Bitcoin\Networking\Factory($loop); $peers = $factory->getPeerFactory($factory->getDns()); $cache = new ArrayCache(); $recorder = $peers->getRecorder($cache); for ($i = 1; $i < 3; $i++) { $random = $this->randomNetAddr(); $recorder->save($random); $this->assertGreaterThan(0, $recorder->count()); } $recorder->reset(); $this->assertEquals(0, $recorder->count()); $recorder->pop(); }
/** * @param LoopInterface $loop */ public function __construct(LoopInterface $loop) { $this->inventory = []; $netFactory = new \BitWasp\Bitcoin\Networking\Factory($loop); $dns = $netFactory->getDns(); $peerFactory = $netFactory->getPeerFactory($dns); $locator = $peerFactory->getLocator(); $manager = $peerFactory->getManager(true); $locator->queryDnsSeeds(1)->then(function ($locator) use($manager, $loop) { $manager->connectToPeers($locator, 1)->then(function (array $peers) use($loop) { $this->initZmq($loop); foreach ($peers as $peer) { $this->initPeer($peer); } }); }); }
public function __construct() { $this->haveTx = []; $this->math = Bitcoin::getMath(); $this->generator = Bitcoin::getGenerator(); $this->adapter = EcAdapterFactory::getPhpEcc($this->math, $this->generator); $this->order = $this->adapter->getGenerator()->getOrder(); $this->loop = \React\EventLoop\Factory::create(); $factory = new \BitWasp\Bitcoin\Networking\Factory($this->loop); $dns = $factory->getDns(); $peerFactory = $factory->getPeerFactory($dns); $locator = $peerFactory->getLocator(); $server = new ReactServer($this->loop); $listener = $peerFactory->getListener($server); $this->manager = $peerFactory->getManager(true); $this->manager->registerListener($listener); $this->manager->on('outbound', function (Peer $peer) { $this->setupPeer($peer); }); $this->manager->on('inbound', function (Peer $peer) { $this->setupPeer($peer); }); $locator->queryDnsSeeds()->then(function (Locator $locator) { $this->manager->connectToPeers($locator, 5); $this->loop->addPeriodicTimer(30, function () { echo "Have seen " . $this->inputs . " inputs and " . $this->counter . " high-S signatures \n"; echo "There are " . count($this->violators) . " violators \n"; $largest = 0; $worstPeer = null; foreach ($this->violators as $ip => $v) { if ($v > $largest) { $worstPeer = $ip; $largest = $v; } } if (!is_null($worstPeer)) { echo "Worst peer: {$worstPeer} ({$largest})\n"; } }); echo "Connecting..\n"; }); }
public function testConnectingToPeerRequestingRelay() { $loop = new \React\EventLoop\StreamSelectLoop(); $factory = new \BitWasp\Bitcoin\Networking\Factory($loop); $peerFactory = $factory->getPeerFactory($factory->getDns()); $locator = $peerFactory->getLocator(); $manager = $peerFactory->getManager(true); $deferred = new Deferred(); $onInv = function (Peer $peer, Inv $inv) use($deferred, $loop) { foreach ($inv->getItems() as $item) { if ($item->isTx()) { $peer->close(); $deferred->resolve($item); } } }; $onSeeds = function (Locator $locator) use($manager, $deferred, $onInv, $loop) { for ($i = 0; $i < 8; $i++) { $manager->connectNextPeer($locator)->then(function (Peer $peer) use($onInv) { $peer->on('inv', $onInv); }, function ($err) use($loop) { $loop->stop(); }); } }; $locator->queryDnsSeeds(1)->then($onSeeds, function ($err) use($loop) { $loop->stop(); }); $receivedTx = false; $deferred->promise()->then(function () use(&$receivedTx) { $receivedTx = true; })->always(function () use($loop) { $loop->stop(); }); $loop->run(); $this->assertTrue($receivedTx); }
<?php require_once "../vendor/autoload.php"; use BitWasp\Bitcoin\Networking\Peer\Peer; $loop = React\EventLoop\Factory::create(); $factory = new \BitWasp\Bitcoin\Networking\Factory($loop); $peerFactory = $factory->getPeerFactory($factory->getDns()); $host = $peerFactory->getAddress('147.87.116.162'); $local = $peerFactory->getAddress('192.168.192.39'); $deferred = new \React\Promise\Deferred(); $peer = $peerFactory->getPeer(); $peer->on('version', function (Peer $peer, \BitWasp\Bitcoin\Networking\Messages\Version $ver) use($deferred) { $deferred->resolve($ver); }); $peer->on('ready', function (Peer $peer) use($factory) { $peer->close(); }); $connector = $peerFactory->getConnector(); $peer->requestRelay()->connect($connector, $host); $deferred->promise()->then(function ($msg) use($loop) { print_r($msg); $loop->stop(); }); $loop->run();
<?php require "../vendor/autoload.php"; use BitWasp\Bitcoin\Networking\Peer\Peer; $loop = React\EventLoop\Factory::create(); $factory = new \BitWasp\Bitcoin\Networking\Factory($loop); $dns = $factory->getDns(); $peerFactory = $factory->getPeerFactory($dns); $locator = $peerFactory->getLocator(); $manager = $peerFactory->getManager($locator); $locator->queryDnsSeeds()->then(function (\BitWasp\Bitcoin\Networking\Peer\Locator $locator) use(&$loop, $manager) { $manager->connectNextPeer()->then(function (Peer $peer) use(&$loop) { echo "connected to " . $peer->getRemoteAddr()->getIp() . "\n"; $loop->stop(); }, function ($error) { throw $error; }); }); $loop->run();