/** * @param UtxoView $utxoView * @param TransactionInterface $tx * @return ScriptValidationInterface */ public function queue(UtxoView $utxoView, TransactionInterface $tx) { $hex = $tx->getHex(); $t = ['txid' => spl_object_hash($tx), 'tx' => $hex, 'scripts' => []]; for ($i = 0, $c = count($tx->getInputs()); $i < $c; $i++) { $output = $utxoView->fetchByInput($tx->getInput($i))->getOutput(); $witness = isset($tx->getWitnesses()[$i]) ? $tx->getWitness($i) : null; $t['scripts'][] = $output->getScript()->getHex(); } $this->results[] = $t; return $this; }
/** * @param TransactionInterface $transaction */ private function processTransaction(TransactionInterface $transaction) { $results = []; $nOut = count($transaction->getOutputs()); for ($i = 0; $i < $nOut; $i++) { $output = $transaction->getOutput($i); $script = $output->getScript()->getBinary(); if (!isset($results[$script])) { $results[$script] = $output->getValue(); } else { $results[$script] += $output->getValue(); } } // Compare results to known contracts foreach ($this->contracts as $contract) { $requirements = $contract['requirements']; $rCount = count($requirements); $have = 0; foreach ($requirements as $script => $value) { if (isset($results[$script])) { echo 'pmt'; if ($results[$script] >= $value) { $have++; } } } if ($have > 0) { if ($have < $rCount) { $command = 'tx.partial'; } else { $command = 'tx.complete'; } $this->listener->send(json_encode(['slug' => $contract['slug'], 'command' => $command, 'tx' => $transaction->getHex()])); } } }
/** * @param TransactionInterface $transaction * @return \React\Promise\Promise */ public function transactionBroadcast(TransactionInterface $transaction) { return $this->client->request('blockchain.transaction.broadcast', [$transaction->getHex()]); }
/** * @param TransactionInterface $transaction * @param bool $allowExtremeFees * @return string */ public function sendrawtransaction(TransactionInterface $transaction, $allowExtremeFees = false) { $send = $this->client->execute('sendrawtransaction', [$transaction->getHex(), $allowExtremeFees]); $this->checkNotNull($send); return $send; }
/** * @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; }