Example #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)];
 }
Example #2
0
 /**
  * @param TransactionInterface $transaction
  * @param int $outputToSpend
  * @param ScriptInterface|null $script
  * @param int $nSequence
  * @return $this
  */
 public function spendOutputFrom(TransactionInterface $transaction, $outputToSpend, ScriptInterface $script = null, $nSequence = TransactionInputInterface::SEQUENCE_FINAL)
 {
     // Check TransactionOutput exists in $tx
     $transaction->getOutput($outputToSpend);
     $this->input($transaction->getTxId(), $outputToSpend, $script, $nSequence);
     return $this;
 }
Example #3
0
 /**
  * @param TransactionInterface $tx
  * @param Flags $flags
  * @param array $scripts
  * @return string
  */
 private function dispatch(TransactionInterface $tx, Flags $flags, array $scripts)
 {
     $this->blockingZmq->send(json_encode(['txid' => $tx->getTxId()->getHex(), 'tx' => $tx->getHex(), 'flags' => $flags->getFlags(), 'scripts' => $scripts]));
     $result = $this->blockingZmq->recv();
     return (bool) $result;
 }
Example #4
0
 /**
  * @param TransactionInterface $tx
  * @return bool
  */
 public function isRelevantAndUpdate(TransactionInterface $tx)
 {
     $this->updateEmptyFull();
     $found = false;
     if ($this->isFull()) {
         return true;
     }
     if ($this->isEmpty()) {
         return false;
     }
     // Check if the txid hash is in the filter
     $txHash = $tx->getTxId();
     if ($this->containsData($txHash)) {
         $found = true;
     }
     // Check for relevant output scripts. We add the outpoint to the filter if found.
     foreach ($tx->getOutputs() as $vout => $output) {
         $script = $output->getScript();
         $parser = $script->getScriptParser();
         foreach ($parser as $exec) {
             if ($exec->isPush() && $this->containsData($exec->getData())) {
                 $found = true;
                 if ($this->isUpdateAll()) {
                     $this->insertOutPoint($tx->makeOutPoint($vout));
                 } else {
                     if ($this->isUpdatePubKeyOnly()) {
                         $type = ScriptFactory::scriptPubKey()->classify($script);
                         if ($type->isMultisig() || $type->isPayToPublicKey()) {
                             $this->insertOutPoint($tx->makeOutPoint($vout));
                         }
                     }
                 }
             }
         }
     }
     if ($found) {
         return true;
     }
     foreach ($tx->getInputs() as $txIn) {
         if ($this->containsOutPoint($txIn->getOutPoint())) {
             return true;
         }
         $parser = $txIn->getScript()->getScriptParser();
         foreach ($parser as $exec) {
             if ($exec->isPush() > 0 && $this->containsData($exec->getData())) {
                 return true;
             }
         }
     }
     return false;
 }