Skip to content

Commit 5707f85

Browse files
committed
Change generating proof of key possession and pub key recovering in AccountsWrapper
1 parent 328a1c8 commit 5707f85

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

celo_sdk/contracts/AccountsWrapper.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import sys
22

3-
from eth_keys.datatypes import PublicKey
4-
from web3 import Web3
5-
3+
from celo_sdk.celo_account.account import Account
4+
from celo_sdk.celo_account.messages import encode_defunct
65
from celo_sdk.celo_account.datastructures import SignedMessage
7-
from celo_sdk.utils import hash_utils
86
from celo_sdk.contracts.base_wrapper import BaseWrapper
97
from celo_sdk.registry import Registry
8+
from celo_sdk.utils import hash_utils
9+
10+
from eth_keys.datatypes import PublicKey
11+
from web3 import Web3
1012

1113

1214
class Accounts(BaseWrapper):
@@ -234,8 +236,8 @@ def authorize_validator_signer(self, signer: str, proof_of_signing_key_possessio
234236
message = self.web3.soliditySha3(['address'], [account]).hex()
235237
prefixed_message_hash = hash_utils.hash_message_with_prefix(
236238
self.web3, message)
237-
pub_key = PublicKey.recover_from_msg_hash(
238-
prefixed_message_hash, proof_of_signing_key_possession).to_hex()
239+
prefixed_message_hash = encode_defunct(hexstr=prefixed_message_hash)
240+
pub_key = Account.recover_hash_to_pub(prefixed_message_hash, vrs=proof_of_signing_key_possession.vrs).to_hex()
239241
func_call = self._contract.functions.authorizeValidatorSignerWithPublicKey(
240242
signer, proof_of_signing_key_possession.v, self.web3.toBytes(proof_of_signing_key_possession.r), self.web3.toBytes(proof_of_signing_key_possession.s), pub_key)
241243
return self.__wallet.send_transaction(func_call)
@@ -264,17 +266,20 @@ def authorize_validator_signer_and_bls(self, signer: str, proof_of_signing_key_p
264266
message = self.web3.soliditySha3(['address'], [account]).hex()
265267
prefixed_message_hash = hash_utils.hash_message_with_prefix(
266268
self.web3, message)
267-
pub_key = PublicKey.recover_from_msg_hash(
268-
prefixed_message_hash, proof_of_signing_key_possession).to_hex()
269+
prefixed_message_hash = encode_defunct(hexstr=prefixed_message_hash)
270+
pub_key = Account.recover_hash_to_pub(prefixed_message_hash, vrs=proof_of_signing_key_possession.vrs).to_hex()
269271

270272
func_call = self._contract.functions.authorizeValidatorSignerWithKeys(signer, proof_of_signing_key_possession.v, self.web3.toBytes(proof_of_signing_key_possession.r),
271273
self.web3.toBytes(proof_of_signing_key_possession.s), pub_key, hash_utils.is_leading_with_0x(bls_public_key), hash_utils.is_leading_with_0x(bls_pop))
272274
return self.__wallet.send_transaction(func_call)
273275

274276
def generate_proof_of_key_possession(self, account: str, signer: str) -> SignedMessage:
275277
message = self.web3.soliditySha3(['address'], [account]).hex()
278+
prefixed_message_hash = hash_utils.hash_message_with_prefix(
279+
self.web3, message)
280+
prefixed_message_hash = encode_defunct(hexstr=prefixed_message_hash)
276281
signer_acc = self.__wallet.accounts[signer]
277-
signature = signer_acc.sign_message(message)
282+
signature = signer_acc.sign_message(prefixed_message_hash)
278283
return signature
279284

280285
def get_name(self, account: str, block_number: int = None) -> str:

0 commit comments

Comments
 (0)