Hot answers tagged

145

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 ...


62

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 ...


38

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 ...


34

Taking the sha256 hash of that hash gives 3b a3 ed fd 7a 7b .............. But the real transaction hash according to blockexplorer.com is .............. 7b 7a fd ed a3 3b The answer I was getting was correct, but bytewise reversed. I need to get used to Bitcoin using little-endian storage.


30

I guess you mean Vanitygen: https://bitcointalk.org/index.php?topic=25804.0 From that page: Vanitygen is a command-line vanity bitcoin address generator. Vanitygen accepts as input a pattern, or list of patterns to search for, and produces a list of addresses and private keys. Vanitygen's search is probabilistic, and the amount of time ...


28

The difficulty is already to the point where it requires over a quadrillion hashes to solve a block. 2^32 is only 4 billion. Fewer than one in a billion times will there be any nonce that makes the block valid. A miner simply has to try every possible nonce on a different block. He can vary the coinbase, the transaction set, and/or the block timestamp. Any ...


28

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 ...


25

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


23

It's just to get shorter addresses. Regular public keys are 65 bytes long, which is much too long to be convenient. Compressed public keys are 33 bytes and could potentially be used instead of hashes, though these are a little longer than 20-byte hashes. It also seems likely that Satoshi didn't know about compressed public keys or wasn't comfortable with ...


21

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 ...


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

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 ...


17

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 ...


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

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

(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

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

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. ...


11

Network hashrate calculated using formula: H ~= h / t , where t is time that took to find X number of blocks and h is approximate number of hashes it should have taken to solve X number of blocks, h = X * (D * 2**256 / (0xffff * 2**208)) Wiki:Difficulty Bitcoin network hashrate stats available at bitcoinwatch.com and bitcoincharts.com .


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

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 ...


11

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

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 ...


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