<oembed><type>rich</type><version>1.0</version><author_name>npub1g6vxlp4e0nyhs2dqxxcryztyf5f5hyuaq93nw4r87zcnv0sdsa0qqsl5wd</author_name><author_url>https://nostr.ae/npub1g6vxlp4e0nyhs2dqxxcryztyf5f5hyuaq93nw4r87zcnv0sdsa0qqsl5wd</author_url><provider_name>njump</provider_name><provider_url>https://nostr.ae</provider_url><html>📅 Original date posted:2019-10-04&#xA;📝 Original message:Are you assuming no network protocol changes?&#xA;&#xA;At root, the requirement is that peers can prove their total chain POW.&#xA;&#xA;Since each block has the height in the coinbase, a peer can send a short&#xA;proof of height for a disconnected header and could assert the POW for that&#xA;header.&#xA;&#xA;Each peer could send the the N strongest headers (lowest digest/most POW)&#xA;for their main chain and prove the height of each one.&#xA;&#xA;The total chain work can be estimated as N times the POW for the lowest in&#xA;the list.  This is an interesting property of how POW works.  The 10th best&#xA;POW block will have about 10% of the total POW.&#xA;&#xA;The N blocks would be spread along the chain and the peer could ask for all&#xA;headers between any 2 of them and check the different in claimed POW.  If&#xA;dishonesty is discovered, the peer can be banned and all info from that&#xA;peer wiped.&#xA;&#xA;You can apply the rule hierarchically.  The honest peers would have a much&#xA;higher POW chain.  You could ask the peer to give you the N strongest&#xA;headers between 2 headers that they gave for their best chain.  You can&#xA;check that their height is between the two limits.&#xA;&#xA;The peer would effectively be proving their total POW recursively.&#xA;&#xA;This would require a new set of messages so you can request info about the&#xA;best chain.&#xA;&#xA;It also has the nice feature that it allows you to see if multiple peers&#xA;are on the same chain, since they will have the same best blocks.&#xA;&#xA;The most elegant would be something like using SNARKS to directly prove&#xA;that your chain tip has a particular POW.  The download would go tip to&#xA;genesis, unlike now when it is in the other direction.&#xA;&#xA;------------------------------------------------------------------------&#xA;&#xA;In regard to your proposal, I think the key is to limit things by peer,&#xA;rather than globally.&#xA;&#xA;The limit to header width should be split between peers.  If you have N&#xA;outgoing peers, they get 1/N of your header download resources each.&#xA;&#xA;You store the current best/most POW header chain and at least one&#xA;alternative chain per outgoing peer.&#xA;&#xA;You could still prune old chains based on POW, but the best chain and the&#xA;current chain for each outgoing peer should not be pruned.&#xA;&#xA;The security assumption is that a node is connected to at least one honest&#xA;node.&#xA;&#xA;If you split resources between all peers, then it prevents the dishonest&#xA;nodes from flooding and wiping out the progress for the honest peer.&#xA;&#xA;- Message Limiting -&#xA;&#xA;I have the same objection here.  The message limiting should be per peer.&#xA;&#xA;An honest peer who has just been connected to shouldn&#39;t suffer a penalty.&#xA;&#xA;Your point that it is only a few minutes anyway may make this point moot&#xA;though.&#xA;-------------- next part --------------&#xA;An HTML attachment was scrubbed...&#xA;URL: &lt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20191005/ea973505/attachment.html&gt;</html></oembed>