Hot answers tagged

147

Here is an extremely simplified sketch of the problem, but it should give a pretty good idea of what the problem is. The data: This is the hash of the lastest block (shortened to 30 characters): 00000000000001adf44c7d69767585 These are the hashes of a few valid transactions waiting for inclusion (shortened). 5572eca4dd4 db7d0c0b845 And this the hash ...


65

The following is a description of the global, statistical gamble which is played every 10 or so minutes. The interval of the game is controlled by the difficulty which says how many "hashes" are needed per interval. In other words, the difficulty and target define the "odds of the house" against your chance of getting a winning SHA hash. The nonce is the ...


41

They try to find a random nonce (a little random data) that goes into a block and makes the block have a (SHA256) hash that (in binary) starts with a certain amount of 0's. The more zeroes the more rare hash is. A good hash' outcome is not predictable, and so you have to try a lot of times to find a good nonce. The amount of zeroes are based on how ...


29

RIPEMD was used because it produces the shortest hashes whose uniqueness is still sufficiently assured. This allows Bitcoin addresses to be shorter. SHA256 is used as well because Bitcoin's use of a hash of a public key might create unique weaknesses due to unexpected interactions between RIPEMD and ECDSA (the public key signature algorithm). Interposing an ...


27

You're hashing the hexadecimal representation of the first hash. You need to hash the actual hash -- the binary data that the hex represents. Try this: $ echo -n hello |openssl dgst -sha256 -binary |openssl dgst -sha256


22

Short answer: no. Long answer: Blocks are exactly 80 bytes long. When have you ever seen an 80 character password? Blocks start with a bunch of null bytes in the version field. Again, when have you seen that in a password? Each miner is mining a different block. You don't know the merkle root of what they're mining because that contains a hash of a secret ...


21

It means that there will be no significant speedup by implementing the algorithm in an ASIC, as compared to a CPU based implementation. This is usually achieved by requiring a lot of memory, which when implementing this on an ASIC, translates to needing lots of physical area on the chip. ASIC implementations derive their power from having many physically ...


20

Short answer: difficulty = hashrate / (2^256 / max_target / intended_time_per_block) = hashrate / (2^256 / (2^208*65535) / 600) = hashrate / (2^48 / 65535 / 600) = hashrate / 7158388.055 (where hashrate is expressed in hashes/s) Longer answer: there is no direct relation between the actual network hashrate and the ...


19

We don't know for sure, but the most popular theory is that a double hash was chosen to protect against length extension attacks.


19

The hashrate can be calculated from the expected rate of finding a block (144 a day), the actual rate of finding a block and the current difficulty. So let's calculate the average hash_rate for a single day: expected_blocks = 144 difficulty = 11187257.461361 # this is on May 22nd 2013 blocks_found = 155 # Also May 22nd 2013 hash_rate = (blocks_found/...


18

NooShare is an idea for: a decentralised ledger similar to Bitcoin with the novel feature that its proofs of work are iterations of essentially arbitrary Markov-Chain Monte-Carlo (MCMC) chains, the scheduling of which can be purchased using the currency itself. It is a novel economic basis for sharing fallow computational resources. I don't know ...


17

Bitcoin uses double hashing almost everywhere it hashes in one of two variants: RIPEMD160(SHA256(x)) called Hash160 which produces a 160 bit output hashing the public key to generate part of a Bitcoin addresses SHA256(SHA256(x)) called Hash256 which produces a 256 bit output generating the checksum in a Bitcoin address hashing the block in a merkle tree ...


15

I can see that you are talking about the mining process and the SHA hashing algorithm. From what I understand that function needs to be: Scalable - one needs to be able to precisely adjust how much work needs to be put in for a desired amount. This is done through the use of Target/Difficulty and uniformity of the output of the SHA function (it produces ...


15

(If I may repeat myself a bit...) Mining is like having a lot of people throwing weighted coins (such that 1 millionth of the time it comes up heads) and telling you when they hit a heads. If one such "heads" is reported every 10 minutes (600 seconds), you can make a very accurate estimation of how many times per second the coins are being flipped. In this ...


14

An ASIC is another way of running a program or calculation or what have you (in our case mining) using a PCB/Hardware instead of Software running on a general purpose computer. GPUs are technically ASICs, their application being graphics processing and output. ASIC resistance means your crypto is more fairly distributed because their is no centralization ...


14

How to calculate the target from bits Let's start with a block-header, always 80-bytes that looks like this: 04000000b9e2784a84e5d2468cee60ad14e08d0fee5dda49a37148040000000000000000e9dd2b13157508891880ef68729a1e5ecdde58062ebfa214a89f0141e5a4717faefd2b577627061880564bec From the 80-bytes, the bits are actually the 72nd to 76th byte: ...


13

From Zooko's answer provided in Crypto StackExchange: SHA-256(SHA-256(x)) was proposed by Ferguson and Schneier in their excellent book "Practical Cryptography" (later updated by Ferguson, Schneier, and Kohno and renamed "Cryptography Engineering") as a way to make SHA-256 invulnerable to "length-extension" attack. They called it "SHA-256d".


13

The wiki answers this. TLDR: to prevent against birthday attacks. Bitcoin is using two hash iterations (denoted SHA256^2 ie "SHA256 function squared") and the reason for this relates to a partial attack on the smaller but related SHA1 hash. SHA1's resistance to birthday attacks has been partially broken as of 2005 in O(2^64) vs the design O(2^80). While ...


13

Mining provides a way to reach consensus on what the transaction ledger should look like and know that nobody is cheating. That's the non-technical definition of mining. What exactly is Mining? The "authority" for double spending is the blockchain. The blockchain consists of the history of all blocks in the blockchain plus the next block of transactions. ...


13

I believe that the use of the term "pointer" in the this sentence is not referring to the low-level data type, such as int *pointer_to_int; would be in C. I think it's more referring to a "pointer" as a key into a data structure or database table. In this sense, the hash is a pointer/key used to retrieve the information you are looking for. For example, ...


12

The wiki claim that this is to prevent birthday attacks is wrong. If you can successfully execute a birthday attack on a single call to the hash function, you get a successful birthday attack on the second call. This is easy to see as having hash(x) == hash(y) implies hash(hash(x)) == hash(hash(y)). If you really wanted to guard against this, you would do ...


12

The P2SH, as defined in BIP 16, states that The purpose of pay-to-script-hash is to move the responsibility for supplying the conditions to redeem a transaction from the sender of the funds to the redeemer. The benefit is allowing a sender to fund any arbitrary transaction, no matter how complicated, using a fixed-length 20-byte hash that is ...


11

The requirements of the Bitcoin calculation function: Every calculation must depend on the previous calculation. This is what makes each block strengthen the security of previous blocks. Every calculation should be impossible to know, or even make "partial progress" on, before the previous block is found and published. This is done to make sure to prevent ...


11

Blocks are identified by their hash. This means that in your story, in Jan 2017, when B gets broadcast, any node that it is advertized to will think "I already have this block", and ignore it. However, when we consider block hash collisions to be a realistic situation, there is another issue that may arise: If two blocks with the same hash and the same ...


10

Client creates a new transaction, adds it to its memory pool Client broadcasts an inv frame, which indicates that it has something in its memory pool, by giving the hash of the transaction to one or more connected peers Peer receives inv frame, checks its own memory pool, it's not in there, so it sends a getdata frame back Client receives a getdata frame for ...


10

The important thing here is, that every mining pool/solo miner is working on a different input: They have different coinbase transactions and are working on different sets of transactions. Further entropy can be added by changing the nonce and extra-nonce, by adding another transaction, or by changing the order of the transactions. While there can be block ...


10

note: what Nils Schneider calls 'z', i call 'm'. this gist implements all this: https://gist.github.com/nlitsme/dda36eeef541de37d996 the calculation ecdsa signing is done as follows: given a message 'm', a sign-secret 'k', a private key 'x' R = G*k (elliptic curve scalar multiplication) r = xcoordinate(R) s = (m + x * r) / k (mod q) q = the ...


10

I got linked this question. I made a tool which includes a component that allows one to simulate mining: http://yogh.io/#mine:last It's not entirely accurate; it doesn't support BIP 34, so the block height is not reflected in the coinbase tx, and it's still got some bugs. Currently in alpha. But it can give you some pointers. It'll construct a block on ...


9

Hashes are 256-bit integers, meaning they are whole numbers between 0 and 115792089237316195423570985008687907853269984665640564039457584007913129639935. There are no infinitely many different hashes. In particular, the number of hashes smaller than the target is exactly equal to the target. In any case, Cantor's diagonal has nothing to do with it - if ...


Only top voted, non community-wiki answers of a minimum length are eligible