Received: from sog-mx-3.v43.ch3.sourceforge.com ([172.29.43.193] helo=mx.sourceforge.net) by sfs-ml-2.v29.ch3.sourceforge.com with esmtp (Exim 4.76) (envelope-from ) id 1YxZTs-0002pz-Df for bitcoin-development@lists.sourceforge.net; Wed, 27 May 2015 11:26:40 +0000 Received-SPF: pass (sog-mx-3.v43.ch3.sourceforge.com: domain of gmail.com designates 209.85.220.169 as permitted sender) client-ip=209.85.220.169; envelope-from=tier.nolan@gmail.com; helo=mail-qk0-f169.google.com; Received: from mail-qk0-f169.google.com ([209.85.220.169]) by sog-mx-3.v43.ch3.sourceforge.com with esmtps (TLSv1:RC4-SHA:128) (Exim 4.76) id 1YxZTr-0003q5-9j for bitcoin-development@lists.sourceforge.net; Wed, 27 May 2015 11:26:40 +0000 Received: by qkhg32 with SMTP id g32so3335381qkh.0 for ; Wed, 27 May 2015 04:26:33 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.229.16.69 with SMTP id n5mr41365277qca.25.1432725993868; Wed, 27 May 2015 04:26:33 -0700 (PDT) Received: by 10.140.85.241 with HTTP; Wed, 27 May 2015 04:26:33 -0700 (PDT) In-Reply-To: <20150527101516.GB25814@savin.petertodd.org> References: <201505270346.17014.luke@dashjr.org> <20150527101516.GB25814@savin.petertodd.org> Date: Wed, 27 May 2015 12:26:33 +0100 Message-ID: From: Tier Nolan Cc: Bitcoin Dev Content-Type: multipart/alternative; boundary=001a1133e3f6ecd15705170e8380 X-Spam-Score: 3.3 (+++) X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. -1.5 SPF_CHECK_PASS SPF reports sender host as permitted sender for sender-domain 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (tier.nolan[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record 1.2 MISSING_HEADERS Missing To: header 1.0 HTML_MESSAGE BODY: HTML included in message -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 2.7 MALFORMED_FREEMAIL Bad headers on message from free email service X-Headers-End: 1YxZTr-0003q5-9j Subject: Re: [Bitcoin-development] Version bits proposal X-BeenThere: bitcoin-development@lists.sourceforge.net X-Mailman-Version: 2.1.9 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 27 May 2015 11:26:40 -0000 --001a1133e3f6ecd15705170e8380 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Wed, May 27, 2015 at 11:15 AM, Peter Todd wrote: > The median time mechanism is basically a way for hashing power to show > what time they think it is. Equally, the nVersion soft-fork mechanism is > a way for hashing power to show what features they want to support. > > Fair enough. It means slightly more processing, but the median time could be cached in the header index, so no big deal. Block counts are inconvenient for planning, as there's no guarantee > they'll actually happen in any particular time frame, forward and back. > I don't think the deadline needs to be set that accurately. A roughly 6 month deadline should be fine, but as you say a majority of miners is needed to abuse the median time and it is already a miner poll. Perhaps the number of blocks used in the median could be increased to reduce "noise". The median time could be median of the last 144 blocks plus 12 hours. > If you assume no large reorganizations, your table of known BIPs can > just as easily be a list of block heights even if the median time > mechanism is used. > I think it makes it easier to write the code. It reduced the state that needs to be stored per BIP. You don't need to check if the previous bips were all accepted. Each bit is assigned to a particular BIP for a particular range of times (or blocks). If block numbers were used for the deadline, you just need to check the block index for the deadline block. enum { BIP_INACTIVE =3D 0, BIP_ACTIVE, BIP_LOCKED BIP_INVALID_BLOCK, } int GetBIPState(block, bip) { if (block.height =3D=3D bip.deadline) // Bit must be set to match locked/unlocked at deadline { int bipState =3D check_supermajority(...); if (bipState =3D=3D BIP_LOCKED && (block.nVersion & bip.bit) return BIP_LOCKED; if (bipState !=3D BIP_LOCKED && (block.nVersion & (~bip.bit))) return BIP_INACTIVE; return BIP_INVALID_BLOCK; } if (block.height > deadline) // Look at the deadline block to determine if the BIP is locked return (block_index[deadline].nVersion & bip_bit) !=3D 0 ? BIP_LOCK= ED : BIP_INACTIVE; if (block.height < startline + I) // BIP cannot activate/lock until startline + implicit window size return INACTIVE; return check_supermajority(....) // Check supermajority of bit } The block at height deadline would indicate if the BIP was locked in. Block time could still be used as long as the block height was set after that. The deadline_time could be in six months. The startline height could be the current block height and the deadline_height could be startline + 35000. The gives roughly start time =3D now deadline time =3D now + six months deadline height =3D now + eight months The deadline height is the block height when the bit is returned to the pool but the deadline time is when the BIP has to be accepted. It also helps with the warning system. For each block height, there is a set of known BIP bits that are allowed. Once the final deadline is passed, the expected mask is zeros. On Wed, May 27, 2015 at 11:15 AM, Jorge Tim=C3=B3n wrote= : > On May 27, 2015 11:35 AM, "Tier Nolan" wrote: > > > Was the intention to change the 95% rule. You need 750 of the last 100= 0 > to activate and then must wait at least 1000 for implication? > > You need 75% to start applying it, 95% to start rejecting blocks that > don't apply it. > I think the phrasing is ambiguous. I was just asking for clarification. "Whenever I out of any W *subsequent* blocks (regardless of the block itself) have bit B set," That suggests that the I of W blocks for the 95% rule must happen after activation. This makes the rule checking harder. Easier to use the current system, where blocks that were part of the 750 rule also count towards the 95% rule. --001a1133e3f6ecd15705170e8380 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable


On Wed, May 27, 2015 at 11:15 AM, Peter Todd <pete@petertodd.org&= gt; wrote:
The median time mechanism is basically a way for hashing power to sh= ow
what time they think it is. Equally, the nVersion soft-fork mechanism is a way for hashing power to show what features they want to support.


Fair enough.=C2=A0 It means slightly m= ore processing, but the median time could be cached in the header index, so= no big deal.

If you assume no large reorganizations, your table of known BIPs can=
just as easily be a list of block heights even if the median time
mechanism is used.

I think it makes it = easier to write the code.=C2=A0 It reduced the state that needs to be store= d per BIP.=C2=A0 You don't need to check if the previous bips were all = accepted.

Each bit is assigned to a particular BIP for a = particular range of times (or blocks).

If bloc= k numbers were used for the deadline, you just need to check the block inde= x for the deadline block.

enum {
=C2=A0=C2= =A0=C2=A0 BIP_INACTIVE =3D 0,
=C2=A0=C2=A0=C2=A0 BIP_ACTIVE,<= br>
=C2=A0=C2=A0=C2=A0 BIP_LOCKED
=C2=A0=C2=A0=C2=A0 BIP_INVAL= ID_BLOCK,
}

int GetBIPState(block, bip)
{
=C2= =A0=C2=A0=C2=A0 if (block.height =3D=3D bip.deadline)=C2=A0 // Bit must be = set to match locked/unlocked at deadline
=C2=A0=C2=A0=C2=A0 {=
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 int bipState =3D = check_supermajority(...);
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 if (bipState =3D=3D BIP_LOCKED && (block.nVersion & b= ip.bit)
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 return BIP_LOCKED;

=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 if (bipState !=3D BIP_LOCKED && (block.nVersi= on & (~bip.bit)))
=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 return BIP_INACTIVE;

=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return BIP_INVALID_BLOCK;
=C2=A0=C2= =A0=C2=A0 }

=C2=A0=C2=A0=C2=A0 if (block.height > dead= line) // Look at the deadline block to determine if the BIP is locked
= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return (block_index[deadline].nV= ersion & bip_bit) !=3D 0 ? BIP_LOCKED : BIP_INACTIVE;

=C2=A0=C2=A0=C2=A0 if (block.height < startline + I) // BIP cannot acti= vate/lock until startline + implicit window size
=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return INACTIVE;

=C2=A0=C2= =A0=C2=A0 return check_supermajority(....) // Check supermajority of bit}

The block at height deadline would indicate if the BIP= was locked in.

Block time could still be used as long as= the block height was set after that.=C2=A0 The deadline_time could be in s= ix months.=C2=A0 The startline height could be the current block height and= the deadline_height could be startline + 35000.=C2=A0

T= he gives roughly

start time =3D now
deadlin= e time =3D now + six months
deadline height =3D now + eight m= onths

The deadline height is the block height when the bi= t is returned to the pool but the deadline time is when the BIP has to be a= ccepted.

It also helps with the warning system= .=C2=A0 For each block height, there is a set of known BIP bits that are al= lowed.=C2=A0 Once the final deadline is passed, the expected mask is zeros.=

On Wed, May 2= 7, 2015 at 11:15 AM, Jorge Tim=C3=B3n <jtimon@jtimon.cc> wrot= e:
On May 27, 2015 11:35 AM, "Tier Nolan" <tier.nolan@gmail.com> wrote:

> Was the intention to change the 95% rule.=C2=A0 You nee= d=20 750 of the last 1000 to activate and then must wait at least 1000 for=20 implication?

You need 75% to start applying it, 95% to start rejec= ting blocks that don't apply it.


I think the phrasing is ambiguous.=C2=A0 I was= just asking for clarification.

"Whenever I out of any W sub= sequent blocks (regardless of the block itself) have bit B set,"
That suggests that the I of W blocks for the 95% rule must= happen after activation.=C2=A0 This makes the rule checking harder.=C2=A0 = Easier to use the current system, where blocks that were part of the 750 ru= le also count towards the 95% rule.
--001a1133e3f6ecd15705170e8380--