I am developing a dapp where I need the public key of an address of the user, is it possible to get the public key in the contract (using SmartPy)? Or even on the client side using taquito or any other library?
2 Answers
It is not possible to do from inside a contract. But you can use the following RPC:
https://tezos.gitlab.io/alpha/rpc.html#get-block-id-context-contracts-contract-id-manager-key
Example:
-
Hi, thanks for the answer. The above link only gives me the public key for the manager, right? And not of the users, right?– illusionJul 15, 2021 at 16:36
-
tz1
,tz2
,tz3
are implicit accounts. And manager_key is their public key, where thetz*
address is the hash of the public key. Jul 15, 2021 at 16:42 -
In the contract, you cannot obtain the public key from an address but if you are given both the public key and the address you can check that the public key corresponds to the address. In Michelson, assuming you have the address and the public key at the top of your stack this is done with HASH_KEY; IMPLICIT_ACCOUNT; ADDRESS; COMPARE; EQ
.
In the client, you can use the RPC linked in @rodrigo-quelhas' answer but it will only work if the public key for the account has been revealed on chain. Usually revelation is done just before the first transfer from the implicit account.