You've already forked specification
Clarified hash endianness
Added Bitcoin Cash treatment of hash endianness which differs from mainstream hash implementations.
This commit is contained in:
@@ -5,7 +5,6 @@ This specification does not explain what hashes are, nor the details of the spec
|
||||
Instead, this page will focus on which hashing algorithms are used, where they are used, and why they are used there.
|
||||
|
||||
## SHA-256
|
||||
|
||||
[SHA-256](https://en.wikipedia.org/wiki/SHA-2) is widely used throughout the Bitcoin Cash protocol to identify blocks and transactions along with a variety of purposes in transaction scripts.
|
||||
The most notable uses of SHA-256 are:
|
||||
|
||||
@@ -25,14 +24,14 @@ Since [BIP-34](/protocol/forks/bip-0034), the block height is now required to be
|
||||
- `D5D27987D2A3DFC724E359870C6644B40E497BDC0589A033220FE15429D88599`
|
||||
- `E3BF3D07D4B0375638D5F1DB5255FE07BA2C4CB067CD81B84EE974B6585FB468`
|
||||
|
||||
In contrast to many hashing algorithm implementations, Bitcoin Cash block and transaction hashes are *displayed* and *sent over the network* using a little-endian representation.
|
||||
This can be confusing when, for example, a block hash is treated as a big-endian integer during comparisons with the block difficulty for block validation or mining.
|
||||
## RIPEMD-160
|
||||
|
||||
[RIPEMD-160](https://en.wikipedia.org/wiki/RIPEMD) is used in Bitcoin Cash scripts to create short, quasi-anonymous representations of payees for transactions.
|
||||
Since its brevity is also a potential liability for the anonymity it provides (since shorter hashes generally provide less collision-resistance), it is used in conjunction with SHA-256 when generating an address from a public key.
|
||||
That is, `(public key) -> SHA-256 -> RIPEMD-160 -> (address)`.
|
||||
This SHA-256 then RIPEMD-160 process has its own operation for ease-of-use, [OP_HASH160](/protocol/blockchain/script/op-codes/op-hash160).
|
||||
|
||||
## Murmur
|
||||
## Murmur
|
||||
|
||||
[MurmurHash](https://en.wikipedia.org/wiki/MurmurHash) is used in Bitcoin to support [Bloom filters](https://en.wikipedia.org/wiki/Bloom_filter).
|
||||
The specific version used is the MurmurHash version 3 (32-bit), with the first hash initialized to `(numberOfHashesRequired * 0xFBA4C795L + nonce)` where `nonce` is a randomly chosen 32-bit unsigned integer.
|
||||
Reference in New Issue
Block a user