/** * @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)]; }
/** * @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; }
/** * @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; }
/** * @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; }