블록의 해시 코드는 어떻게 생성됩니까?
-
-
수행 할 수있는 한 가지 테스트는 먼저 진정한 무작위 페이로드 바이트 집합을 생성하고이를base58 체크섬에 전달하여base58 체크섬의 분포 속성을 평가 한 다음 제안한 변환을 수행하는 것입니다.그런 다음 KS 테스트를 수행하여 숫자 분포가 실험적 분포와 통계적으로 동일한 지 평가합니다.One test you can do is first assess the distribution properties of base58 checksum by generating a truly random set of payload bytes and passing this to base58 checksum and then do the transformation you suggest. Then perform a KS test to assess if the distribution of digits is statistically the same as the experimental one.
- 1
- 2019-05-17
- Ezy
-
2 대답
- 투표
-
- 2019-05-10
- 특정 블록 헤더의 바이트 표현을 가져옵니다. http://mainnet-node.tzscan.io/chains/메인/블록/헤드/헤더/원시 . 블록 헤더의 형식은 the 에 설명되어 있습니다. 문서 .
- BLAKE2b (32 비트) 해시 다이제스트 가져 오기
- 앞에 2 바이트 '\ x01 \ x34'추가 ( "B"문자를 담당)
- Base58은 체크섬으로 인코딩합니다.
무작위성은 없습니다.
제빵사가 블록 헤더를 선택합니다. 제빵사는 다양한 블록을 쉽게 구성하고 가장 원하는 해시가있는 블록 만 주입하여 '무작위'번호 생성을 조작 할 수 있습니다. Tezos 블록은 작업 증명 만 필요하기 때문에 비트 코인이나 이더 리움보다 쉽습니다. "아니오,그런 식으로 난수를 생성 할 수 없습니다"라는 조언이 수년 동안 주어졌습니다.
- Take a byte representation of a particular block header: http://mainnet-node.tzscan.io/chains/main/blocks/head/header/raw. The format of the block header is described in the docs.
- Get a BLAKE2b (32bit) hash digest of it
- Prepend two bytes '\x01\x34' (they are responsible for "B" letter)
- Base58 encode it with checksum
There is no randomness.
The baker chooses the block header. A baker can easily construct many different blocks and inject only the block with the most desired hash, manipulating your 'random' number generation. Because a Tezos block only requires an easy proof of work, this is easier than in Bitcoin or Ethereum, where the advice "no, you can't generate random numbers that way" has been given for years.
-
감사.그럼 다음 질문은 그 블록 헤더가 어떻게 선택됩니까?"의사 무작위성"의 원래 소스는 어디에서 왔습니까?Thanks. So the next question is, how is that block header selected? Where is the original source of "pseudo-randomness" coming from?
- 0
- 2019-05-10
- luchonacho
-
블록 헤더는 어떻게 생성됩니까?한 블록 헤더가 다른 블록 헤더와 다른 점은 무엇입니까?How is the block header produced? What makes one block header different from the other?
- 0
- 2019-05-11
- luchonacho
-
후속 질문을해야한다고 생각되면 원래 질문 (및 제목?)을 더 명확하게 수정하십시오.이것은 지금까지 작성한 질문에 대한 답인 것 같습니다.그 대답은 "공식적인"출처없이 그 자체로 매우 신뢰할 만합니다.시도해보고 실제로 예상되는 해시를 얻는 지 확인하십시오.(그래요)If you feel you need to ask followup questions, please edit your original question (and title?) to be more clear. This seems to answer the question you wrote so far. The answer is very credible on its own without "official" sources. Just try it and see that you do indeed get the expected hash. (You do.)
- 1
- 2019-05-13
- Tom
-
@Tom 나는 원래 질문이 내 목적에 충분하지 않다는 것을 깨달았습니다.따라서 후속 조치입니다.게시물을 업데이트했습니다.또한 절차는 작동하지만 어디에서 왔는지 아는 것이 흥미로울 것입니다.예 :이것이 블록 체인에 기록되어 있습니까?@Tom I realized the original question didn't suffice for my purposes. Hence the follow up one. I updated the post. Also, albeit the proceedure works, it would be interesting to know where it comes from. E.g. is this written in the blockchain?
- 0
- 2019-05-14
- luchonacho
-
나는 고전적인 경고를 Tezos에 적용하려고했습니다.블록 해시에 대한 유용한 인용이 있는지 확실하지 않습니다.어쨌든 세부 사항은 실제 질문에 대한 답변을 변경하지 않습니다.I tried to adapt the classic warning to Tezos. I'm not sure whether there are any useful citations about the block hash. In any case the details won't change the answer to your real question: don't.
- 0
- 2019-05-14
- Tom
-
@Tom,업데이트 주셔서 감사합니다! luchonacho,블록 해시는 실제로 임의성의 소스로 사용되어서는 안됩니다. Tezos가 베이킹 권한 배포를 위해 내부적으로 사용하는 체계를 더 잘 살펴보세요.그것은 코드에 있지만 곧 여기에 답변이 있기를 바랍니다. :) https://tezos.stackexchange.com/questions/1201/how-to-calculate-a-random-seed@Tom, thanks for your updates! luchonacho, block hash indeed shouldn't be used as a source of randomness, better look at the scheme Tezos uses internally for baking rights distribution. It's in the code, but I hope there will be an answer here soon :) https://tezos.stackexchange.com/questions/1201/how-to-calculate-a-random-seed
- 0
- 2019-05-15
- Michael Zaikin
-
@MichaelZaikin 업데이트 해 주셔서 감사합니다.나는 내 자신의 분석을했고 다른 결론을 얻었다.내 대답을 참조하십시오.어떤 생각이라도 환영합니다!@MichaelZaikin Thanks for the update. I made my own analysis, and got a different conclusion. See my answer. Any thoughts are more than welcome!
- 0
- 2019-05-16
- luchonacho
-
- 2019-05-16
제 질문의 파트 1은 Michael이 답변했습니다. 두 번째 부분은 어떻습니까? 글쎄,방금 봤어. 내가 한 일은 :
- 블록 1에서 최신 (매우 긴)까지 전체 일련의 해시 코드를 추출합니다.
- 해시 코드에 포함 된 숫자를 추출합니다 (즉,문자 제거).
- 의도적으로 설계된 테스트를 통해 일련의 숫자의 "무작위성"을 분석합니다.
테스트에 따르면 무작위성 가설은 5 %에서 기각 될 수 없습니다. 흥미롭게도 숫자 분포가 매우 왜곡되어 있습니다. 어떤 것이 든 균등 분포와 다소 비슷할 것으로 예상 할 수 있습니다 (반대가 사실이 아님,즉 균등 분포가 임의성을 의미하지 않음). 나는 여전히 이것에 대해 두근 두근하고 있지만,처음 보면 시리즈가 무작위 일 수 있음을 암시합니다.
위 분석을 재현하는 R 코드는 다음과 같습니다.
# Initialise stuff remove(list = ls()) options(timeout = 1000000) # in case request times-out library(jsonlite) library(ggplot2) library(randtests) # Get maximum number of blocks last_block <- fromJSON("https://api6.tzscan.io//v3/head") N <- last_block$level blocks <- seq(1,N,by = 1) hashs <- vector(mode="character", length = N) # Download all hash codes (timer and print included, for analysis) VERY LONG start <- proc.time() for (i in 1:N) { url <- paste0("https://api6.tzscan.io//v3/block_hash_level/",i) hashs[i] <- fromJSON(url) print(i) } finish <- proc.time() - start # Remove letters n_hashs <- as.numeric(gsub("\\D+","", hashs, perl = TRUE)) df <- data.frame(value=n_hashs) names(df)[names(df) == "df.value....." ] <- "value" # Plot (definitively not a uniform distribution, for any level of zooming in) ggplot(df, aes(x=value)) + geom_histogram() # Randomness tests (indicating the number sequence is not random) bartels.rank.test(df$value) cox.stuart.test(df$value) difference.sign.test(df$value) rank.test(df$value) runs.test(df$value) turning.point.test(df$value)
Part 1 of my question was answered by Michael. What about the second part? Well, I just had a look at it. What I did is:
- extract the full series of hash codes, from block 1 to the latest (VERY LONG).
- extract the numbers contained in such hash codes (i.e. remove letters).
- analyse the "randomness" of this series of numbers with purposely designed tests.
The tests suggest that the randomness hypothesis cannot be rejected at the 5%. Interestingly, the distribution of numbers is very skewed. If anything, one might expect it to be somewhat resembling a uniform distribution (noticing that the contrary is not true, i.e. uniform distribution does not imply randomness). I'm still pounding on this, but a first look suggest that the series might be random.
The R code to reproduce the above analysis is below:
# Initialise stuff remove(list = ls()) options(timeout = 1000000) # in case request times-out library(jsonlite) library(ggplot2) library(randtests) # Get maximum number of blocks last_block <- fromJSON("https://api6.tzscan.io//v3/head") N <- last_block$level blocks <- seq(1,N,by = 1) hashs <- vector(mode="character", length = N) # Download all hash codes (timer and print included, for analysis) VERY LONG start <- proc.time() for (i in 1:N) { url <- paste0("https://api6.tzscan.io//v3/block_hash_level/",i) hashs[i] <- fromJSON(url) print(i) } finish <- proc.time() - start # Remove letters n_hashs <- as.numeric(gsub("\\D+","", hashs, perl = TRUE)) df <- data.frame(value=n_hashs) names(df)[names(df) == "df.value....." ] <- "value" # Plot (definitively not a uniform distribution, for any level of zooming in) ggplot(df, aes(x=value)) + geom_histogram() # Randomness tests (indicating the number sequence is not random) bartels.rank.test(df$value) cox.stuart.test(df$value) difference.sign.test(df$value) rank.test(df$value) runs.test(df$value) turning.point.test(df$value)
-
하나는 해시가 균일하게 무작위로 _look_ 될 것으로 예상합니다.바닐라 베이커는 POW가 성공할 때까지 의사 랜덤 POW 논스를 생성합니다.따라서 선택된 해시는 균일하게 무작위로 보일 것입니다.(가짜) 블록 해시를 생성하고 각 비트를 무작위로 균일하게 선택한 다음base58로 변환하고 분석에 연결하는 것이 좋습니다.어쨌든 제빵사는 해시 _today_를 조작 할 이유가 없지만,이유를 제시하면 쉽게 조작 할 수 있습니다.One expects the hashes to _look_ uniformly random. The vanilla baker will generate pseudorandom POW nonces until the POW succeeds. Thus the chosen hashes should look uniformly random. I suggest generating (bogus) block hashes, choosing each bit uniformly at random and then converting to base58, and plugging them into your analysis. In any case, note that bakers have no reason to manipulate the hash _today_, but _could_ easily do so if you give them a reason.
- 1
- 2019-05-16
- Tom
-
참고 :tzscan을 스팸 할 필요는 없습니다.`length` 및`head` 쿼리 매개 변수와 함께 노드 RPC/chains/main/blocks/를 사용하여 한 번에 많은 해시를 얻을 수 있습니다.Side note: it is not necessary to spam tzscan. You can get lots of hashes in one go using the node RPC /chains/main/blocks/ with the `length` and `head` query parameters.
- 0
- 2019-05-16
- Tom
-
@Tom 제안 해 주셔서 감사합니다.마지막 항목과 관련하여 노드 RPC를 사용하는 방법에 대한 설명서가 있습니까?@Tom Thanks for the suggestions. Regarding the last one, is there a manual on how to use the node RPC?
- 0
- 2019-05-17
- luchonacho
체인의 주어진 블록 (예 : 이 블록 )을 고려합니다.해시 코드는 다음과 같습니다.
저는이 해시 코드를 가져 와서 "무작위"번호를 생성하는 도구를 개발 중입니다.목표를 달성하려면 다음 사항을 이해해야합니다.
어떤 도움이라도 환영합니다.