Example #1
0
 public function testReadVector()
 {
     $math = EccFactory::getAdapter();
     $varint = new VarInt($math);
     $vector = new Vector($varint, function (Parser &$parser) {
         return $parser->readBytes(16);
     });
     $eBuffer = Buffer::hex('010203040506070809000a0b0c0d0e0f');
     $hex = '03010203040506070809000a0b0c0d0e0f010203040506070809000a0b0c0d0e0f010203040506070809000a0b0c0d0e0f';
     $buffer = Buffer::hex($hex);
     $parser = new Parser($buffer);
     $array = $vector->read($parser);
     foreach ($array as $item) {
         $this->assertEquals($eBuffer->getBinary(), $item->getBinary());
     }
 }
 /**
  * @param TransactionInterface $transaction
  * @return BufferInterface
  */
 public function serialize(TransactionInterface $transaction)
 {
     $math = Bitcoin::getMath();
     $int8le = new Int8($math, ByteOrder::LE);
     $int32le = new Int32($math, ByteOrder::LE);
     $uint32le = new Uint32($math, ByteOrder::LE);
     $varint = new VarInt($math, ByteOrder::LE);
     $vector = new Vector($varint, function () {
     });
     $binary = $int32le->write($transaction->getVersion());
     $flags = 0;
     if (!$transaction->getWitnesses()->isNull()) {
         $flags |= 1;
     }
     if ($flags) {
         $binary .= $int8le->write(0);
         $binary .= $int8le->write($flags);
     }
     $binary .= $vector->write($transaction->getInputs()->all());
     $binary .= $vector->write($transaction->getOutputs()->all());
     if ($flags & 1) {
         foreach ($transaction->getWitnesses() as $witness) {
             $binary .= $witness->getBuffer()->getBinary();
         }
     }
     $binary .= $uint32le->write($transaction->getLockTime());
     return new Buffer($binary);
 }