コード例 #1
0
ファイル: sig.py プロジェクト: sparklecoin/btcpy
 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([]))
コード例 #2
0
ファイル: sig.py プロジェクト: sparklecoin/btcpy
 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([])
コード例 #3
0
    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
コード例 #4
0
def nulldata_script(data: bytes) -> NulldataScript:
    '''create nulldata (OP_return) script'''

    stack = StackData.from_bytes(data)
    return NulldataScript(stack)
コード例 #5
0
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
コード例 #6
0
ファイル: sig.py プロジェクト: sparklecoin/btcpy
 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
コード例 #7
0
ファイル: sig.py プロジェクト: sparklecoin/btcpy
 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