LearnBitcoin

Bitcoin Dev Archive 2015

Uniquely identifying forked chains

3 messages, 28 Aug 2015. Started by gladoscc.

gladoscc, Matt Whitlock, Jorge Timón

Permalink Original thread on gnusha.org

gladoscc permalink original

There has been discussion of using the genesis block hash to identify chains in BIP 21 (bitcoin:// URI scheme). However, this does not allow identification between blockchain forks building upon the same genesis block. While many see this as undesirable, I think it is inevitable that this will eventually happen at some point, and think it is best to build systems redundantly.

I propose identifying blockchains for BIP 21 and any other relevant needs through:

1) the genesis block hash for a new chain, or 2) a hash of the genesis block hash, concatenated with block hash(es) of fork point(s) for a fork chain

This would support forks, forks of forks, forks of forks of forks, etc while preserving a fixed length chain identifier.

If a user wants to specify "whatever chain is the longest with PoW", they would use (1). In times where multiple chains are coexisting and being actively mined, a user can use (2) to specifically identify a chain.

Thoughts?

Matt Whitlock in reply to gladoscc permalink original

Why would you use a hash of hashes? Wouldn't it be simpler and just as effective to use either:

1) the genesis block hash, or
2) the block hash of the first block in a fork?

Every block hash in a chain implicitly subsumes the genesis block hash of that chain, so there's no need to incorporate the genesis block hash again.

On Saturday, 29 August 2015, at 1:27 am, gladoscc via bitcoin-dev wrote:

Quoted text (22 lines)
> There has been discussion of using the genesis block hash to identify
> chains in BIP 21 (bitcoin:// URI scheme). However, this does not allow
> identification between blockchain forks building upon the same genesis
> block. While many see this as undesirable, I think it is inevitable that
> this will eventually happen at some point, and think it is best to build
> systems redundantly.
>
> I propose identifying blockchains for BIP 21 and any other relevant needs
> through:
>
> 1) the genesis block hash for a new chain, or
> 2) a hash of the genesis block hash,  concatenated with block hash(es) of
> fork point(s) for a fork chain
>
> This would support forks, forks of forks, forks of forks of forks, etc
> while preserving a fixed length chain identifier.
>
> If a user wants to specify "whatever chain is the longest with PoW", they
> would use (1). In times where multiple chains are coexisting and being
> actively mined, a user can use (2) to specifically identify a chain.
>
> Thoughts?
Jorge Timón in reply to Matt Whitlock permalink original

On Fri, Aug 28, 2015 at 10:15 PM, Matt Whitlock via bitcoin-dev <bitcoin-dev@lists•linuxfoundation•org> wrote:

Quoted text (3 lines)
> Why would you use a hash of hashes? Wouldn't it be simpler and just as effective to use either:
>
> 1) the genesis block hash, or

If it's a new chain, we're talking about a "spinoffs" https://bitcointalk.org/index.php?topic=563972.0

Quoted text (1 line)
> 2) the block hash of the first block in a fork?

Yes, this seems like the best solution in the schism hardfork case. What both sides of a schism hardfork would want is to avoid hurting bystander users who can't tell the difference between the old and the new currency/chain.

I should extend BIP99's section on schism hardforks. Anybody else is welcomed to propose changes to the BIP draft, just PR to this branch:

https://github.com/jtimon/bips/tree/bip-forks

Quoted text (30 lines)
> Every block hash in a chain implicitly subsumes the genesis block hash of that chain, so there's no need to incorporate the genesis block hash again.
>
>
> On Saturday, 29 August 2015, at 1:27 am, gladoscc via bitcoin-dev wrote:
>> There has been discussion of using the genesis block hash to identify
>> chains in BIP 21 (bitcoin:// URI scheme). However, this does not allow
>> identification between blockchain forks building upon the same genesis
>> block. While many see this as undesirable, I think it is inevitable that
>> this will eventually happen at some point, and think it is best to build
>> systems redundantly.
>>
>> I propose identifying blockchains for BIP 21 and any other relevant needs
>> through:
>>
>> 1) the genesis block hash for a new chain, or
>> 2) a hash of the genesis block hash,  concatenated with block hash(es) of
>> fork point(s) for a fork chain
>>
>> This would support forks, forks of forks, forks of forks of forks, etc
>> while preserving a fixed length chain identifier.
>>
>> If a user wants to specify "whatever chain is the longest with PoW", they
>> would use (1). In times where multiple chains are coexisting and being
>> actively mined, a user can use (2) to specifically identify a chain.
>>
>> Thoughts?
> _______________________________________________
> bitcoin-dev mailing list
> bitcoin-dev@lists•linuxfoundation•org
> https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev