Exemplo n.º 1
0
 /**
  * @param TransactionInterface $transaction
  * @return array
  */
 public function convertTransactionToArray(TransactionInterface $transaction)
 {
     $inputs = [];
     foreach ($transaction->getInputs() as $input) {
         $inputs[] = $this->convertTxinToArray($input);
     }
     $outputs = [];
     foreach ($transaction->getOutputs() as $output) {
         $outputs[] = $this->convertTxoutToArray($output);
     }
     $buf = $transaction->getBuffer()->getBinary();
     return ['hash' => $transaction->getTxId()->getHex(), 'version' => $transaction->getVersion(), 'inputs' => $inputs, 'outputs' => $outputs, 'locktime' => $transaction->getLockTime(), 'raw' => bin2hex($buf), 'size' => strlen($buf)];
 }
Exemplo n.º 2
0
 /**
  * {@inheritdoc}
  * @see \BitWasp\Bitcoin\SerializableInterface::getBuffer()
  */
 public function getBuffer()
 {
     return $this->transaction->getBuffer();
 }
Exemplo n.º 3
0
 /**
  * @param TransactionInterface $transaction
  * @param bool|true $checkSize
  * @return bool
  */
 public function checkTransaction(TransactionInterface $transaction, $checkSize = true)
 {
     // Must be one txin, and one txout
     $inputs = $transaction->getInputs();
     $nInputs = count($inputs);
     if (0 === $nInputs) {
         throw new \RuntimeException('CheckTransaction: no inputs');
     }
     $outputs = $transaction->getOutputs();
     $nOutputs = count($outputs);
     if (0 === $nOutputs) {
         throw new \RuntimeException('CheckTransaction: no outputs');
     }
     if ($checkSize && $transaction->getBuffer()->getSize() > $this->params->maxBlockSizeBytes()) {
         throw new \RuntimeException('CheckTransaction: tx size exceeds max block size');
     }
     $this->checkOutputsAmount($outputs)->checkInputsForDuplicates($inputs);
     if ($transaction->isCoinbase()) {
         $first = $transaction->getInput(0);
         $scriptSize = $first->getScript()->getBuffer()->getSize();
         if ($scriptSize < 2 || $scriptSize > 100) {
             throw new \RuntimeException('CheckTransaction: coinbase scriptSig fails constraints');
         }
     } else {
         foreach ($inputs as $input) {
             if ($input->isCoinBase()) {
                 throw new \RuntimeException('CheckTransaction: a non-coinbase transaction input was null');
             }
         }
     }
     return true;
 }