diff --git a/pycardano/key.py b/pycardano/key.py index 55f9d01f..485ee433 100644 --- a/pycardano/key.py +++ b/pycardano/key.py @@ -148,6 +148,9 @@ def __eq__(self, other): def __repr__(self) -> str: return self.to_json() + def __hash__(self): + return hash(self.payload) + class SigningKey(Key): def sign(self, data: bytes) -> bytes: diff --git a/pycardano/txbuilder.py b/pycardano/txbuilder.py index 14e63adc..fde55e73 100644 --- a/pycardano/txbuilder.py +++ b/pycardano/txbuilder.py @@ -1256,7 +1256,7 @@ def build_and_sign( witness_set = self.build_witness_set() witness_set.vkey_witnesses = [] - for signing_key in signing_keys: + for signing_key in set(signing_keys): signature = signing_key.sign(tx_body.hash()) witness_set.vkey_witnesses.append( VerificationKeyWitness(signing_key.to_verification_key(), signature) diff --git a/test/pycardano/test_key.py b/test/pycardano/test_key.py index 4f0665ea..3801f246 100644 --- a/test/pycardano/test_key.py +++ b/test/pycardano/test_key.py @@ -97,3 +97,18 @@ def test_key_save(): SK.save(f.name) sk = PaymentSigningKey.load(f.name) assert SK == sk + + +def test_key_hash(): + sk = PaymentSigningKey.generate() + vk = PaymentVerificationKey.from_signing_key(sk) + + sk_set = set() + vk_set = set() + + for _ in range(2): + sk_set.add(sk) + vk_set.add(vk) + + assert len(sk_set) == 1 + assert len(vk_set) == 1