Como Hash uma chave pública de Tezos
4 respostas
- votos
-
- 2020-01-16
Heres Comofazerissoem Python,onde a variável
pubkey
é amatrizbytes da chavepúblicaP2HASH_MAGIC = bytes.fromhex('06a1a4') blake2bhash = blake2b(pubkey, digest_size=20).digest() shabytes = sha256(sha256(P2HASH_MAGIC + blake2bhash).digest()).digest()[:4] pkhash = b58encode(P2HASH_MAGIC + blake2bhash + shabytes).decode()
Heres how to do it in python, where the variable
pubkey
is the bytes array of the public keyP2HASH_MAGIC = bytes.fromhex('06a1a4') blake2bhash = blake2b(pubkey, digest_size=20).digest() shabytes = sha256(sha256(P2HASH_MAGIC + blake2bhash).digest()).digest()[:4] pkhash = b58encode(P2HASH_MAGIC + blake2bhash + shabytes).decode()
-
Obrigado,isso é ótimo.Você seimportaria demelhoraressa resposta adicionando comentáriosexplicando o que acontece lá?Porexemplo - o que ép2hash_magice por que cortamos algunsbytesna linha 3.Thanks, that's great. Would you mind to improve that answer by adding comments explaining what happens there? For example - what is P2HASH_MAGIC and why do we cut out some bytes in line 3.
- 0
- 2020-01-16
- K SS
-
Aentradapara B58ENCODE ÃO 51bytes longos (`p2hash_magic` é de 3bytes,`blake2bhash` é 20bytes `shabytes 'é 32 - 4=28bytes).Isso vaiproduzir uma cadeia de 49-Char Long 'Base58Check`.Noentanto,umendereço "TZ1" é de 36 caracteres.Certamente,essemétodonãoestá correto,é?Input for b58encode is going to be 51 bytes long (`P2HASH_MAGIC` is 3 bytes, `blake2bhash` is 20 bytes `shabytes` is 32 - 4 = 28 bytes) . This is going to produce a 49-char long `base58check` string. However, a `tz1` address is 36-char long. Surely, this method is not correct, is it?
- 0
- 2020-02-11
- K SS
-
- 2020-01-16
Vocêtem o repo Tezos construído?Se sim,vocêpodeexecutar o OCAML CLI com Tezos-Crypto:
$ dune utop src/lib_crypto
e depois:
ocaml# open Tezos_crypto;; ocaml# Ed25519.Public_key.of_b58check_exn "edpkuoK2J2UVbDcSTdJgP85JmDN3gxBCswcgApbtY5d7zHVunwCKNR" |> Ed25519.Public_key.hash |> Ed25519.Public_key_hash.to_b58check;; - : string = "tz1L1bypLzuxGHmx3d6bHFJ2WCi4ZDbocSCA"
Do you have the tezos repo built? If yes, you can run the ocaml CLI with tezos-crypto:
$ dune utop src/lib_crypto
and then:
ocaml# open Tezos_crypto;; ocaml# Ed25519.Public_key.of_b58check_exn "edpkuoK2J2UVbDcSTdJgP85JmDN3gxBCswcgApbtY5d7zHVunwCKNR" |> Ed25519.Public_key.hash |> Ed25519.Public_key_hash.to_b58check;; - : string = "tz1L1bypLzuxGHmx3d6bHFJ2WCi4ZDbocSCA"
-
Emboraesta sejaprovavelmente umaboa resposta,não é útilnomeu caso.Euprecisofazerissoprogramaticamente,em um aplicativo Nodejs.While this is probably a good answer, it is not helpful in my case. I need to do it programatically, in a nodejs app.
- 0
- 2020-01-16
- K SS
-
- 2020-01-17
em Python,usando a versão do Git de Pytezos :
.from pytezos.crypto import Key public_key = 'edpkuoK2J2UVbDcSTdJgP85JmDN3gxBCswcgApbtY5d7zHVunwCKNR' hash = Key(public_key).public_key_hash() print(hash)
In python, using the git version of pytezos:
from pytezos.crypto import Key public_key = 'edpkuoK2J2UVbDcSTdJgP85JmDN3gxBCswcgApbtY5d7zHVunwCKNR' hash = Key(public_key).public_key_hash() print(hash)
-
- 2020-01-17
em Nodejstambém épossívelfazerisso usando
Sotez
:Import {Key} de 'Sotez'; const sotezkey=nova chave ({KEY: 'edpktx799pgw7m48551urer52vcenncszwe9F9cst4v6h5vcrqmje'}); aguardar soteezkey.ready; console.log (Soteezkey.PublicKeyHash ());
Imprime:
tz1xv78kmt7chyvdli9rmqp1kuwulhdafzdk
In NodeJS it is also possible to do it using
sotez
:import {Key} from 'sotez'; const sotezKey = new Key({ key: 'edpktx799pgw7M4z8551URER52VcENNCSZwE9f9cst4v6h5vCrQmJE' }); await sotezKey.ready; console.log(sotezKey.publicKeyHash());
prints:
tz1Xv78KMT7cHyVDLi9RmQP1KuWULHDafZdK
Preciso criar um hash de Tezos Public Key combaseem umpúblico
ed25519
apenas.Estou ciente de um utilitário quegeratodo o keystorebaseadoem mnemnics -issonão é o queeupreciso.
Eugostaria de umpasso apasso Descrição Como obter de um
edpk
para umformuláriotz1
ou um snippet de código.obrigado.