def _verify_signature(self, inputs, tx): if (tx.sigtype == Transaction.SigType.utxo): for input_utxo in inputs: if (input_utxo['spending_sig'] == ZERO_SIGNATURE or get_sender(input_utxo['spending_tx_hash'], input_utxo['spending_sig']) != input_utxo['owner']): raise InvalidTxSignatureException() elif (tx.sigtype == Transaction.SigType.txn): if (tx.txnsig == ZERO_SIGNATURE): raise InvalidTxSignatureException() signature_address = recoverPersonalSignature(tx.readable_str, tx.txnsig) print("signature_address is %s" % signature_address.hex()) for input_utxo in inputs: if input_utxo['utxotype'] == Transaction.UTXOType.transfer: if input_utxo['owner'] != signature_address: raise InvalidTxSignatureException()
def sender2(self): return get_sender(self.hash, self.sig2)
def sender1(self): return get_sender(self.hash, self.sig1)
def test_signature(t, block): block.sign(t.k0) assert block.sig == sign(block.hash, t.k0) assert block.sender == get_sender(block.hash, sign(block.hash, t.k0))