2017-09-16 3 views
0

주어진 해시가 블록, 블록 높이 또는 트랜잭션을 나타내는 지 확인할 수 있기를 원합니다.Bitcoin 블록 및 트랜잭션 정규식

저는 블록이^[0-9] + $와 같다는 것을 알고 있습니다.^0 $는 그것이 기원 블록이기 때문에 유효합니다. 나는 블록 (64)의 길이 base58에 보통 내가 지금은 정규식으로 결국 트랜잭션이 64

의 길이 base58에 알고있는 0 로 시작 알고

  • 블록 신장^(0 | [1-9] [0-9] *) $
  • 블록 해시^0 + [BASE58 {63} $
  • 트랜잭션 해시^[BASE58 {64} $

그러나 일부 거래가 나타났습니다. 0으로 시작하는 블록 만있는 Bitcoin 프로토콜의 일부가 아닌 것 같아요. 어려움이 1 인 regtest 로컬 (가짜) 네트워크를 실행하고 모든 블록이 0으로 시작하지 않습니다.

블록 해시를 트랜잭션 해시와 구별하기 위해 정규식을 사용하는 신뢰할 수있는 방법이 있습니까?

+0

bitcoin에 대해서는 모르겠지만 블록 해쉬 정규 표현식에서'+'를 제거해야합니다. 그렇지 않으면 처음부터 둘 이상의 0을 허용하고 나중에 63 개의 base58 문자를 가질 수 있습니다. –

+0

Bitcoin의 어려움은 앞에 오는 0이있는 해시를 찾아서 블록을 채우도록하므로 의도적입니다. 하지만이 정규식은 제가 노출 한 문제를 일으 킵니다. – shkschneider

+0

블록이 트랜잭션과 구별되는 각 개별 해시의 패턴이 아니라면 순서 여야합니다. 어떻게 그들을 시각적으로 구별합니까? – wp78de

답변

0

해결해야 할 두 가지 주요 문제가 있습니다. 첫 번째 문제는 트랜잭션 또는 블록 해시의 형식입니다. SHA256 해시는 트랜잭션 또는 블록의 해당되는 일련 화 된 표현입니다. 즉, 이들은 32 바이트 배열이며 일반적으로 사용자에게 16 진수로 표시됩니다. (예 : 라이트 코인과 같은되지 않은 다른 cryptocurrencies는하지만) 적어도 8 제로로, 앞에 0이있을 것이다 당신이 비트 코인에 블록을 언급 한 바와 같이 두 그러므로에 대한 유효성을 검사하는 정규 표현식으로 인해 최소한의 어려움에 단순히

^[a-zA-Z0-9]{64}$ 

, 당신 모든 1/42억9천4백96만7천2백96번째 거래 등이있을 것이다 기대에 (그들이 경우에 선행 0으로 해시를 생성하기 때문에하지만, 거래도 그 범주에 빠질 수 있다는 점에 유의

^[0]{8}[a-zA-Z0-9]{56}$ 

그러므로 또한 다음을 사용할 수 있습니다 해시시).

두 번째 문제는 해시가 실제로 트랜잭션이나 블록에 해당하는지 확인하는 것입니다. 이와 같이 생각하면 많은 유효한 전자 메일 주소가 있지만 실제 전자 메일 주소는 실제 전자 메일 주소와 거의 일치하지 않을 것입니다. 이 검사를 수행하려면 블록 체인의 전체 사본을 갖고 일치하는 항목을 찾거나 그러한 항목이 실제로 존재하는지 확인하기 위해 다른 데이터 구조 (예 : 색인 또는 bloomfilter)를 가져야합니다.

+0

좋아요. 선도 0이 안전하게 하드 규칙으로 간주 될지 확신하지 못했습니다. 그리고 나는 두 번째 (열심히) 문제에 대한 트랜잭션이 있는지 확인하기 위해 RPC를 호출해야한다고 생각합니다. – shkschneider

관련 문제