Bitcoin Forum

Bitcoin => Development & Technical Discussion => Topic started by: Sergio_Demian_Lerner on December 12, 2012, 01:57:59 PM



Title: P2P block template checks
Post by: Sergio_Demian_Lerner on December 12, 2012, 01:57:59 PM
What about using the P2P network to do the work? It's more like the Bitcoin way.


The protocol would be like this:

1. A Miner X creates a block B with (reduced) PoW = Target / 50 (50 times less PoW). This ensures very few "template" blocks will be broadcast.
2. Miner starts working o the real target difficulty on block B (does not wait for votes)
3. The miner X spreads the block B in the network (with reduced PoW)
4. Nodes emit votes in a new type of message saying whether B is valid/invalid, specifying also their software/protocol version.
 Vote = < hash(B), prg_id, True/False >  (aprox. 30 bytes long)
5. Votes are relayed for a short period of time after block B was received (e.g. 30 seconds). Afterwards votes are discarded.
6. Miner collects votes and estimates the acceptance ratio.
7. If acceptance ratio is good, keeps working on the target PoW, if not, drops the block B and starts with another block.


The acceptance ratio could be computed filtering for noisy/forged votes (e.g. if for the same prog_id 90% votes are positive, then it's considered 100% positive).


Title: Re: P2P block template checks
Post by: cunicula on December 12, 2012, 02:24:17 PM
Who gets to vote? Can't I just make lots of cheap nodes. Operate them honestly so that they are in everyone's good books and then abuse their voting power to double-spend. Swap IP addresses, rinse, and repeat.


Title: Re: P2P block template checks
Post by: Sergio_Demian_Lerner on December 12, 2012, 11:48:05 PM
Who gets to vote? Can't I just make lots of cheap nodes. Operate them honestly so that they are in everyone's good books and then abuse their voting power to double-spend. Swap IP addresses, rinse, and repeat.

True.
Maybe only the last x miners with differen prog_ids are able to vote.

E.g.: If the last miners were:

Block n-5: A SatoshiClient 0.7
Block n-4: B XClient
Block n-3: C YClient
Block n-2: A SatoshiClient 0.7
Block n-1: C YClient

Then a miner working on block n collects votes only from A,B,C.