Here is an extremely simplified sketch of the problem, but it should give a pretty good idea of what the problem is.
This is the hash of the lastest block (shortened to 30 characters):
These are the hashes of a few valid transactions waiting for inclusion (shortened).
And this the hash ...
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 ...
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 ...
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 ...
Short answer: no.
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 ...
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/...
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 ...
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
(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 ...
There are a number of issues here, with different answers.
Can Merkle trees use a commutative operation in general to combine hashes?
Yes, but only if they aren't intended to commit to the order of the leaves.
Clearly when a commutative operation is used, [A,B,C,D] and [D,C,A,B] will hash to the same thing. This is not a problem if the Merkle root is ...
How to calculate the target from bits
Let's start with a block-header, always 80-bytes that looks like this:
From the 80-bytes, the bits are actually the 72nd to 76th byte:
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. ...
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 ...
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, ...
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 ...
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 ...
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 ...
note: what Nils Schneider calls 'z', i call 'm'.
this gist implements all this: https://gist.github.com/nlitsme/dda36eeef541de37d996
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 ...
Like others have said, the wiki claim of this preventing birthday attacks is wrong. Rather, this was meant to prevent against length extension attacks.
SHA-256(SHA-256(x)) was proposed by Ferguson and Schneier in their
excellent book "Practical Cryptography" (later updated by Ferguson,
Schneier, and ...
Assume for a second that we found a proof of work algorithm that had all of the good properties of sha256, but was also useful for SETI and maintaining world peace.
Now suppose a group of miners collectively have more than 51% of the hashing power. In which of the following scenarios are they more likely to collude to double spend via a 51% attack:
A) When ...
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 ...
These charts show the approximate network hash rate on the left axis:
We know the network adjusts for 25 new bitcoins per 10 minutes.
Together this provides enough info to give an approximate answer to your question:
hashes per bitcoin
= (network hash rate) / (25 BTC per 10 minutes)
= (180 * Th / s) / (25 * BTC / (600 * s) )
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 ...
I got linked this question.
I made a tool which includes a component that allows one to simulate mining:
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 ...
The simple answer: no.
The not to simple answer: extremely unlikely.
Miners hash an input block, in the hopes of getting a result that satisfies the difficulty requirement, i.e., has a certain number of zeroes in front. Now the possibilities for the miner to vary the input are quite large. There is the 4 byte nonce, there is the order transactions are put ...
Disclaimer: I am going to assume that you are not completely clueless and that you know what an array is, how to count from 0, and how to match brackets, quotes, and colons so that you can read JSON formatted data. If you don't know how to do those things, then please google them first before reading this post.
Also, this post will be very long, and ...
Except from Where is Double hashing performed in Bitcoin?
So why does he hash twice? I suspect it's in order to prevent
SHA-2, like all Merkle-Damgard hashes suffers from a property called
"length-extension". This allows an attacker who knows H(x) to
calculate H(x||y) without knowing x. This is usually not a problem,
The network hash rate can be statistically inferred from the difficulty and the rate at which blocks are found. It's just a more complex version of the fact that if you know that someone is flipping coins and heads comes up 800 times an hour, they're flipping about 1,600 coins an hour.