/**
  * @param array $signatures
  * @param array $publicKeys
  * @return Script|ScriptInterface
  */
 public function makeScriptSig(array $signatures = [], array $publicKeys = [])
 {
     $newScript = new Script();
     if (count($publicKeys) > 0 && count($signatures) === $this->getRequiredSigCount()) {
         $newScript = ScriptFactory::scriptSig()->payToPubKeyHash($signatures[0], $publicKeys[0]);
     }
     return $newScript;
 }
 /**
  * @param TransactionInterface $tx
  * @return Transaction
  */
 public function fixTransaction(Peer $sender, TransactionInterface $tx, &$wasMalleated = false)
 {
     $c = count($tx->getInputs());
     $new = new TransactionInputCollection();
     for ($i = 0; $i < $c; $i++) {
         $input = $tx->getInput($i);
         $script = $input->getScript();
         $classify = ScriptFactory::scriptSig()->classify($input->getScript());
         $this->inputs++;
         if ($classify->isPayToPublicKeyHash()) {
             $parsed = $input->getScript()->getScriptParser()->parse();
             $txSig = TransactionSignatureFactory::fromHex($parsed[0]);
             $txSig = $this->fixSig($sender, $txSig, $wasMalleated);
             $script = ScriptFactory::create()->push($txSig->getBuffer())->push($parsed[1])->getScript();
         }
         $new->addInput(new TransactionInput($input->getTransactionId(), $input->getVout(), $script, $input->getSequence()));
     }
     return new Transaction($tx->getVersion(), $new, $tx->getOutputs(), $tx->getLockTime());
 }
Exemple #3
0
 /**
  * @param array $signatures
  * @param array $publicKeys
  * @return Script|ScriptInterface
  */
 public function makeScriptSig(array $signatures = [], array $publicKeys = [])
 {
     $newScript = new Script();
     if (count($signatures) > 0) {
         $newScript = ScriptFactory::scriptSig()->multisig($signatures);
     }
     return $newScript;
 }
 /**
  * @return \BitWasp\Bitcoin\Script\Script
  */
 public function regenerateScript()
 {
     // todo: this is worrisome, should have some way to fail and defer to the original script
     $signatures = array_filter($this->getSignatures());
     $script = $this->execForInputTypes(function () use(&$signatures) {
         return count($signatures) == 1 ? ScriptFactory::scriptSig()->payToPubKeyHash($signatures[0], $this->publicKeys[0]) : ScriptFactory::create();
     }, function () use(&$signatures) {
         return count($signatures) == 1 ? ScriptFactory::scriptSig()->payToPubKey($signatures[0]) : ScriptFactory::create();
     }, function () use(&$signatures) {
         return count($signatures) > 0 ? ScriptFactory::scriptSig()->multisigP2sh($this->getRedeemScript(), array_filter($this->signatures)) : ScriptFactory::create();
     });
     return $script;
 }