가짜이지만 유효한 프로토콜 해시를 생성하는 방법은 무엇입니까?
-
-
"프로토콜 해시가 어떻게 계산 되는가"라는 좀 더 일반적인 질문을하는 것이 좋을 것 같습니다. 여기에서 자세히 설명하지 않았기 때문입니다.거기에서 원하는 경우 베니 티 프로토콜 해시 생성을 시도 할 수 있습니다;)i think you might as well simply ask the more general question: "how is the protocol hash computed" because it has never been explained here in detail. From there you should be able to try generate vanity protocols hashes if you like ;)
- 0
- 2019-02-23
- Ezy
-
`PsddFKi32cMJ2qPjf43Qv5GDWLDPZb3T3bF6fLKiF5HtvHNU7aP`와 같은 "실제"프로토콜 해시는 경제 프로토콜의 소스 코드 해시의`b58_check` 인코딩 일 뿐이라고 생각합니다 (`src/proto_003_https_psddFKi3/lib_protocol/proto_003_https://gitlab.com/tezos/tezos/tree/mainnet`).하지만 'ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK'와 같은 '가짜 해시'는 무언가의 해시가 아니라고 생각합니다.I think a "real" protocol hash, like `PsddFKi32cMJ2qPjf43Qv5GDWLDPZb3T3bF6fLKiF5HtvHNU7aP` is just the `b58_check` encoding of the hash of the source code of some economic protocol (like the contents of the directory `src/proto_003_PsddFKi3/lib_protocol/src` in `https://gitlab.com/tezos/tezos/tree/mainnet`). However, I think a "fake hash", like `ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK`, is not the hash of something.
- 1
- 2019-02-25
- Eugen
-
2 대답
- 투표
-
- 2019-06-21
PsqEZzKWvmWY29kV6oJZhWDNz9FMmYDjV3S7c496zMuAGDYAF7e
와 같은 'Tezos 프로토콜 해시'는 일부 프로토콜 코드 해시의 Base58Check 인코딩입니다.일부 데이터의 Base58Check 인코딩은 다음과 같이 얻습니다.
base58encode (접두사 + 데이터 + 체크섬)
여기서
prefix
는 인코딩중인 데이터 유형을 식별하는 데 사용되는 고정 바이트 문자열이고,data code>는 인코딩중인 바이트 문자열이며,
checksum
는SHA256 (SHA256 (prefix + data))
의 마지막 4 바이트입니다 (그리고+
는 바이트 문자열 연결).'실제'프로토콜 해시의 경우
data code>는 프로토콜 코드의 Blake2B 해시 (32 바이트)이며 Base58Check 인코딩이 시작되도록
접두사
가 선택됩니다. 문자P
로. 이 접두사는"\ 002 \ 170"
("\ x02 \ xaa"
)입니다.Prefix
하위 모듈을 참조하십시오. a href="https://gitlab.com/tezos/tezos/blob/master/src/lib_crypto/base58.ml"rel="nofollownoreferrer">Base58
모듈 ."가짜"프로토콜 해시는 프로토콜 코드를 나타내지 않는 대신 유효한 Base58Check 문자열입니다. 따라서
data code>는 빈 바이트 문자열이고,우리가 원하는 것은 인코딩이
ProtoGenesisGenesisGenesisGenesisGenesisGenes
와 같은 의미있는 대상 접두어로 시작하는 바이트 문자열prefix
를 찾는 것입니다. 이를 위해 Python 스크립트 b58_prefix.py 가 구출 :$ scripts/b58_prefix.py ProtoGenesisGenesisGenesisGenesisGenesisGenes 0 51 78975543388164909405054148723984031781676975010405372310033317301022658928601531 [2L,170L,11L,205L,127L,252L,160L,63L,87L,227L,132L,83L,240L,211L,232L,76L,48L,139L,3L,192L,36L,3L,192L,36L,3L,192L,76L,45L,174L,248L,179L,168L,190L,60L,105L,187L]
원하는 대상 접두사와 페이로드의 길이 (페이로드가 비어 있으므로
0
)를 사용하여 호출합니다. 목록은 원하는접두사
를 나타냅니다. 마지막으로 다음 접두사를 인코딩하면됩니다.base58 가져 오기 정의tb (l) : returnb ''.join (map (lambda x : x.to_bytes (1,'big'),l)) res=base58.b58encode_check (tb ([2,170,11,205,127,252,160,63,87,227,132,83,240,211,232,76,48,36,3,192,83,87,68,139,76,45,174,248,179,168,190,60,105,187])) 인쇄 (res)
b'ProtoGenesisGenesisGenesisGenesisGenesisGenes3pWKfA '
를 제공합니다.A "Tezos protocol hash" like
PsqEZzKWvmWY29kV6oJZhWDNz9FMmYDjV3S7c496zMuAGDYAF7e
is the Base58Check encoding of the hash of some protocol code.The Base58Check encoding of some data is obtained as follows:
base58encode(prefix + data + checksum)
where
prefix
is some fixed bytestring used to identify the type of data we are encoding,data
is the bytestring we are encoding, andchecksum
are the last 4 bytes ofSHA256(SHA256(prefix+data))
(and+
is bytestring concatenation).For a "real" protocol hash,
data
is the Blake2B hash (on 32 bytes) of the protocol code, andprefix
is chosen such that the Base58Check encoding starts with the letterP
. It turns out that this prefix is"\002\170"
("\x02\xaa"
), see thePrefix
submodule of theBase58
module.A "fake" protocol hash is such that it does not represent any protocol code, instead it is just a valid Base58Check string. So
data
is the empty bytestring, and what we want is to find the bytestringprefix
such the encoding starts with some meaningful target prefix likeProtoGenesisGenesisGenesisGenesisGenesisGenes
. To this end the Python script b58_prefix.py comes to the rescue:$ scripts/b58_prefix.py ProtoGenesisGenesisGenesisGenesisGenesisGenes 0 51 78975543388164909405054148723984031781676975010405372310033317301022658928601531 [2L, 170L, 11L, 205L, 127L, 252L, 160L, 63L, 87L, 227L, 132L, 83L, 240L, 211L, 232L, 76L, 48L, 36L, 3L, 192L, 83L, 87L, 68L, 139L, 76L, 45L, 174L, 248L, 179L, 168L, 190L, 60L, 105L, 187L]
We invoke it with the desired target prefix and the length of the payload (this is
0
as the payload is empty). The list represents the desiredprefix
. Finally, we just need to encode this prefix:import base58 def tb(l): return b''.join(map(lambda x: x.to_bytes(1, 'big'), l)) res = base58.b58encode_check(tb([2, 170, 11, 205, 127, 252, 160, 63, 87, 227, 132, 83, 240, 211, 232, 76, 48, 36, 3, 192, 83, 87, 68, 139, 76, 45, 174, 248, 179, 168, 190, 60, 105, 187])) print(res)
which gives us:
b'ProtoGenesisGenesisGenesisGenesisGenesisGenes3pWKfA'
. -
- 2019-02-26
-
임의 데이터의
blake2b
해시를 가져옵니다. -
\x02\xaa
앞에 추가하고base58로 체크섬으로 인코딩합니다.
Python의 예 :
from pytezos.encoding import base58_encode from pytezos.crypto import blake2b_32 base58_encode(blake2b_32('test').digest(), b'P') >>> b'PsqEZzKWvmWY29kV6oJZhWDNz9FMmYDjV3S7c496zMuAGDYAF7e'
Take
blake2b
hash of arbitrary data.Prepend
\x02\xaa
and base58 encode it with checksum.
Example in Python:
from pytezos.encoding import base58_encode from pytezos.crypto import blake2b_32 base58_encode(blake2b_32('test').digest(), b'P') >>> b'PsqEZzKWvmWY29kV6oJZhWDNz9FMmYDjV3S7c496zMuAGDYAF7e'
ProtoGenesisGenesisGenesisGenesisGenesisGenesk612im
과 같이 가짜이지만 유효한 프로토콜 해시를 생성하려면 어떻게해야하나요?