def solve(self, digest): from .transaction import Witness pubkey = self.privk.pub() sig = self.privk.sign(digest) return (ScriptSig.from_stack_data([ StackData.from_bytes(sig + self.sighash.as_byte()), StackData.from_bytes(pubkey.compressed) ]), Witness([]))
def solve(self, *digests): from .transaction import Witness if len(digests) != len(self.privkeys): raise ValueError('{} privkeys provided and {} digests'.format( len(self.privkeys), len(digests))) script_sig_data = [StackData.zero()] for priv, digest, sighash in zip(self.privkeys, digests, self.sighashes): sig = priv.sign(digest) script_sig_data.append( StackData.from_bytes(sig + sighash.as_byte())) return ScriptSig.from_stack_data(script_sig_data), Witness([])
def _get_unsigned_txn(self): # outputs_amounts is copied so any instance can be modified with change_fee, # and will still function correctly, i.e the change address won't already # be in the self._outputs_amounts dict self._modified_outputs_amounts = self.outputs_amounts.copy() # adding change address to outputs, if there is leftover balance that isn't dust if self._change_amount > 0: self._modified_outputs_amounts[self.change_address] = self._change_amount outputs = [] for i, (addr, amount) in enumerate(self._modified_outputs_amounts.items()): outputs.append(TxOut( value=amount, n=i, script_pubkey=self.get_script_pubkey(addr) )) inputs = [] for t in self._specific_utxo_data: # build inputs using the UTXO data in self._specific_utxo_data, # script_sig is empty as the transaction will be signed later inputs.append( TxIn(txid=t[0], txout=t[1], script_sig=ScriptSig.empty(), sequence=Sequence.max(), witness=Witness([StackData.zero()])) if self.is_segwit else None, ) if self.is_segwit: transaction = MutableSegWitTransaction( version=TX_VERSION, ins=inputs, outs=outputs, locktime=Locktime(self.locktime), ) else: transaction = MutableTransaction( version=TX_VERSION, ins=inputs, outs=outputs, locktime=Locktime(self.locktime) ) return transaction
def nulldata_script(data: bytes) -> NulldataScript: '''create nulldata (OP_return) script''' stack = StackData.from_bytes(data) return NulldataScript(stack)
def SegWit_Witness(sig, pubkey): #TODO Successfully witness_sig = StackData.from_bytes(unhexlify(sig)) witness_pubkey = StackData.from_bytes(unhexlify(pubkey)) witness = Witness([witness_sig, witness_pubkey]) return witness
def solve(self, *digests): script_sig, witness = self.inner_solver.solve(*digests) script_sig_data = script_sig.get_data() script_sig_data.append(StackData.from_bytes(self.preimage)) return ScriptSig.from_stack_data(script_sig_data), witness
def solve(self, *digests): script_sig, witness = self.inner_solver.solve(*digests) script_sig_data = script_sig.get_data() script_sig_data.append(StackData.from_int(self.branch.value)) return ScriptSig.from_stack_data(script_sig_data), witness