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