Пример #1
0
 public function testNetworkSerializer()
 {
     $network = Bitcoin::getDefaultNetwork();
     $parser = new NetworkMessageSerializer(Bitcoin::getDefaultNetwork());
     $factory = new Factory($network, new Random());
     $version = '1';
     $relayUntil = '9999999';
     $expiration = '9898989';
     $id = '123';
     $cancel = '0';
     $minVer = '0';
     $maxVer = '0';
     $priority = '50';
     $comment = new Buffer('comment');
     $statusBar = new Buffer('statusBar');
     $setCancel = [1, 2];
     $setSubVer = [50, 99];
     $detail = new AlertDetail($version, $relayUntil, $expiration, $id, $cancel, $minVer, $maxVer, $priority, $comment, $statusBar, $setCancel, $setSubVer);
     $adapter = EcAdapterFactory::getPhpEcc(new Math(), EccFactory::getSecgCurves()->generator256k1());
     $sig = new Signature($adapter, '1', '1');
     $alert = $factory->alert($detail, $sig);
     $serialized = $alert->getNetworkMessage()->getBuffer();
     $parsed = $parser->parse($serialized)->getPayload();
     /** @var \BitWasp\Bitcoin\Networking\Messages\Alert $parsed */
     $this->assertEquals($alert->getDetail(), $parsed->getDetail());
     $this->assertEquals($alert->getSignature()->getR(), $parsed->getSignature()->getR());
     $this->assertEquals($alert->getSignature()->getS(), $parsed->getSignature()->getS());
 }
Пример #2
0
 /**
  * @param Math $math
  * @param GeneratorPoint $generator
  * @return EcAdapterInterface
  */
 public static function getEcAdapter(Math $math = null, GeneratorPoint $generator = null)
 {
     if (null === self::$adapter) {
         self::$adapter = EcAdapterFactory::getAdapter($math ?: self::getMath(), $generator ?: self::getGenerator());
     }
     return self::$adapter;
 }
 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";
     });
 }
Пример #4
0
 /**
  * @param Math $math
  * @param GeneratorPoint $generator
  * @return EcAdapterInterface
  */
 public static function getEcAdapter(Math $math = null, GeneratorPoint $generator = null)
 {
     return EcAdapterFactory::getAdapter($math ?: self::getMath(), $generator ?: self::getGenerator());
 }