Bitcoin Forum
May 25, 2024, 09:06:34 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Why is there a target field in block headers?  (Read 704 times)
olalonde (OP)
Newbie
*
Offline Offline

Activity: 25
Merit: 0


View Profile
March 31, 2014, 04:42:51 AM
Last edit: March 31, 2014, 08:15:37 AM by olalonde
 #1

Block headers have a `bits` field representing the target at the time a block was mined (according to the Bitcoin wiki). Obviously, clients cannot trust this field as a malicious miner could simply set an easy target, rendering the PoW meaningless. What is the purpose of having a target field in block headers if it cannot be trusted?
Hawkix
Hero Member
*****
Offline Offline

Activity: 531
Merit: 505



View Profile WWW
March 31, 2014, 12:38:05 PM
 #2

There are strict rules how the target is calculated, so miners cannot fake the target, otherwise the block is invalid.

For example, inside the 2016 window of the same difficulty, the target must match the previous one. On the boundaries, rules for adjusting the difficulty applies.

Donations: 1Hawkix7GHym6SM98ii5vSHHShA3FUgpV6
http://btcportal.net/ - All about Bitcoin - coming soon!
olalonde (OP)
Newbie
*
Offline Offline

Activity: 25
Merit: 0


View Profile
March 31, 2014, 01:04:27 PM
 #3

Sure, I know that. I know what the target is and how it is computed.

What I wonder is why is the target is stored in block headers when it should be calculated independently by verifiers? Seems like redundant information at best and a potential pitfall for naive client implementations at worse.
jl2012
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
March 31, 2014, 01:18:08 PM
 #4

Yes, I do not see why it should exist. With 293000 blocks so far, 293000*4=1.17MB is wasted. Not much, but I can't see why

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
Hawkix
Hero Member
*****
Offline Offline

Activity: 531
Merit: 505



View Profile WWW
March 31, 2014, 04:40:33 PM
 #5

Oh, now I understand. Not sure, but:

1) nBits (=target) in block header is stored on disc and verified when loading, you do not want to go all way back
2) there might be some interesting problems when you try to calculate nBits "on the fly" when there are reorgs of chains near the difficulty retarget

thus, it is probably better to keep the value in the header anyway. If there is another, more important reason, I would like to know it, too.

Donations: 1Hawkix7GHym6SM98ii5vSHHShA3FUgpV6
http://btcportal.net/ - All about Bitcoin - coming soon!
DeathAndTaxes
Donator
Legendary
*
Offline Offline

Activity: 1218
Merit: 1079


Gerald Davis


View Profile
April 01, 2014, 03:29:35 AM
 #6

Nodes don't rely on the target value so in theory it could be removed however it does allow nodes to identify bad blocks quicker.  If your node receives a relayed block which has a different target than what it is expecting then the block is invalid and validation can stop.  IIRC at one time altcoin pump and dumpers didn't even have enough skill to realize they needed to change the magic values and ports to ensure the chain will be independent from bitcoin so the clients would be relaying blocks that are simply invalid for the Bitcoin network.

Technically that you are right it isn't needed and it shouldn't be relied upon.  For efficiency sake nodes validate the header values first.  If they are invalid the block is invalid.  They validate the tx set next.  If any tx is invalid the block is invalid.  The merkle tree is constructed next.  If the computed merkle tree root hash doesn't match the root hash in the header then the block is invalid. Finally only after all that validation is complete the node will hash the header and ensure it produces a hash below the target.  The block is now valid and will be relayed to other peers.

olalonde (OP)
Newbie
*
Offline Offline

Activity: 25
Merit: 0


View Profile
April 01, 2014, 05:47:36 AM
 #7

> For efficiency sake nodes validate the header values first.

Makes sense. Thanks.
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!