Tezos 공개 키를 해시하는 방법
4 대답
- 투표
-
- 2020-01-16
python에서 수행하는 방법은 다음과 같습니다. 여기서 변수
pubkey
는 공개 키의 바이트 배열입니다.P2HASH_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()
-
감사합니다.거기에서 무슨 일이 일어나는지 설명하는 의견을 추가하여 그 답변을 개선 하시겠습니까?예를 들어-P2HASH_MAGIC은 무엇이며 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
-
b58encode의 입력 길이는 51 바이트입니다 (`P2HASH_MAGIC`은 3 바이트,`blake2bhash`는 20 바이트`shabytes`는 32-4=28 바이트).이것은 49 자 길이의`base58check` 문자열을 생성합니다.그러나`tz1` 주소는 36 자입니다.확실히이 방법은 정확하지 않습니까?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
테 조스 저장소를 구축 했습니까?그렇다면tezos-crypto로 ocaml CLI를 실행할 수 있습니다.
$ dune utop src/lib_crypto
다음 :
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"
-
이것은 아마도 좋은 대답이지만 제 경우에는 도움이되지 않습니다.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
python에서 pytezos 의git 버전 사용 :
pytezos.crypto 가져 오기 키에서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
NodeJS에서는
sotez
를 사용하여 수행 할 수도 있습니다.import {Key} from 'sotez'; const sotezKey = new Key({ key: 'edpktx799pgw7M4z8551URER52VcENNCSZwE9f9cst4v6h5vCrQmJE' }); await sotezKey.ready; console.log(sotezKey.publicKeyHash());
인쇄물 :
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
공개
ed25519
키만을 기반으로 Tezos 공개 키 해시를 생성해야합니다.니모닉을 기반으로 전체 키 저장소를 생성하는 유틸리티를 알고 있습니다. 이것이 필요한 것이 아닙니다.
edpk
에서tz1
양식 또는 코드 스 니펫으로 이동하는 방법에 대한 단계별 설명을 환영합니다.감사합니다.