예제 #1
0
 /**
  * @param int $sighashType
  * @param int $inputToSign
  * @return Buffer|BufferInterface
  */
 public function hashOutputs($sighashType, $inputToSign)
 {
     if (($sighashType & 0x1f) !== SigHash::SINGLE && ($sighashType & 0x1f) != SigHash::NONE) {
         $binary = '';
         foreach ($this->transaction->getOutputs() as $output) {
             $binary .= $output->getBinary();
         }
         return Hash::sha256d(new Buffer($binary));
     } elseif (($sighashType & 0x1f) == SigHash::SINGLE && $inputToSign < count($this->transaction->getOutputs())) {
         return Hash::sha256($this->transaction->getOutput($inputToSign)->getBuffer());
     }
     return new Buffer('', 32);
 }
예제 #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
  * @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;
 }