コード例 #1
0
 /**
  * @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;
 }
コード例 #2
0
 /**
  * @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()]));
         }
     }
 }
コード例 #3
0
 /**
  * @param TransactionInterface $transaction
  * @return \React\Promise\Promise
  */
 public function transactionBroadcast(TransactionInterface $transaction)
 {
     return $this->client->request('blockchain.transaction.broadcast', [$transaction->getHex()]);
 }
コード例 #4
0
ファイル: Bitcoind.php プロジェクト: nmarley/bitcoin-php
 /**
  * @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;
 }
コード例 #5
0
ファイル: ZmqScriptCheck.php プロジェクト: sbwdlihao/node-php
 /**
  * @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;
 }