Return-Path: Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id C4A21125C for ; Sun, 27 Sep 2015 20:28:18 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-io0-f176.google.com (mail-io0-f176.google.com [209.85.223.176]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 31297188 for ; Sun, 27 Sep 2015 20:28:17 +0000 (UTC) Received: by iofb144 with SMTP id b144so157080314iof.1 for ; Sun, 27 Sep 2015 13:28:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-type; bh=PxqfZgVrcQv4pyoQEQUR8ATWU2hOJjj4T0bQAZybitE=; b=MDOeCs5Sag9aHeaEzb4o2QSqTUTckGcV0bjZUEOqZ+L4oNCdDwav4E1eNJxf0Zq7Y0 uqJcOiSjr+P0NyuUMKM+5BVLoCLL0AZGxEn3Z0w3u6/jZp2rzq5h2s9ChwuPKaWtNPQI Gn0Dnf9kpQvypGaT22EbaHrk6ed2dMCe0c3EjDxxt93M1OddO+GR13i9pCx9FeX7XG8E 9j1RkhBHHacLa47ZMnJDUJMVak1b/8Sg7wwVqsFCYez7FzIjuL24b1wjbZxNpax9zYPO rg0hs3jB8nPOPiNbrwa5r+q9n8xidJZwIQQpsHUoodRgWJfSdfTTeDasvltHKKhcURsI XEZA== X-Gm-Message-State: ALoCoQlbmBIfTnkUZpQO46ktcorDxKtpYik/x+C1zYeX8mExXbrNVEq6Ateu15V3Zsc5Y/N7EooF X-Received: by 10.107.11.154 with SMTP id 26mr17912419iol.105.1443385696626; Sun, 27 Sep 2015 13:28:16 -0700 (PDT) MIME-Version: 1.0 Received: by 10.107.135.104 with HTTP; Sun, 27 Sep 2015 13:27:57 -0700 (PDT) X-Originating-IP: [173.228.107.141] In-Reply-To: <20150927185031.GA20599@savin.petertodd.org> References: <20150927185031.GA20599@savin.petertodd.org> From: Mark Friedenbach Date: Sun, 27 Sep 2015 13:27:57 -0700 Message-ID: To: Peter Todd Content-Type: multipart/alternative; boundary=001a113f7e7cb8e1e90520c06bd8 X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,HTML_MESSAGE, RCVD_IN_DNSWL_LOW,UC_GIBBERISH_OBFU autolearn=no version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: Bitcoin Dev Subject: Re: [bitcoin-dev] Let's deploy BIP65 CHECKLOCKTIMEVERIFY! X-BeenThere: bitcoin-dev@lists.linuxfoundation.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Bitcoin Development Discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 27 Sep 2015 20:28:18 -0000 --001a113f7e7cb8e1e90520c06bd8 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Agree with all CLTV and nVersionBits points. We should deploy a lock-time soft-fork ASAP, using the tried and true IsSuperMajoirty test. However your information regarding BIPs 68 (sequence numbers), 112 (checksequenceverify) and 113 (median time past) is outdated. Debate regarding semantics has been settled, and there are working implementations ready for merge on github. See pull requests #6312, #6564, and #6566. I don=E2=80=99t know what the hold up has been regarding further reviews and = merging, but it is ready. If you believe there are reasons #6312, #6564, or #6566 should not be merged, please speak up. Otherwise it appears there is consensus on these changes. They are related, and there is no reason not to include them in the soft-fork, delaying applications using these features by 6-12 months. On Sun, Sep 27, 2015 at 11:50 AM, Peter Todd via bitcoin-dev < bitcoin-dev@lists.linuxfoundation.org> wrote: > Summary > ------- > > It's time to deploy BIP65 CHECKLOCKTIMEVERIFY. > > I've backported the CLTV op-code and a IsSuperMajority() soft-fork to > the v0.10 and v0.11 branches, pull-reqs #6706 and #6707 respectively. A > pull-req for git HEAD for the soft-fork deployment has been open since > June 28th, #6351 - the opcode implementation itself was merged two > months ago. > > We should release a v0.10.3 and v0.11.1 with CLTV and get the ball > rolling on miner adoption. We have consensus that we need CLTV, we have > a well tested implementation, and we have a well-tested deployment > mechanism. We also don't need to wait for other soft-fork proposals to > catch up - starting the CLTV deployment process isn't going to delay > future soft-forks, or for that matter, hard-forks. > > I think it's possible to safely get CLTV live on mainnet before the end > of the year. It's time we get this over with and done. > > > Detailed Rational > ----------------- > > 1) There is a clear need for CLTV > > Escrow and payment channels both benefit greatly from CLTV. In > particular, payment channel implementations are made significantly > simpler with CLTV, as well as more secure by removing the malleability > vulnerability. > > Why are payment channels important? There's a lot of BTC out there > vulnerable to theft that doesn't have to be. For example, just the other > day I was talking with Nick Sullivan about ChangeTip's vulnerability to > theft, as well as regulatory uncertainty about whether or not they're a > custodian of their users' funds. With payment channels ChangeTip would > only be able to spend as much of a deposit as a user had spent, keeping > the rest safe from theft. Similarly, in the other direction - ChangeTip > to their users - in many cases it is feasible to also use payment > channels to immediately give users control of their funds as they > receive them, again protecting users and helping make the case that > they're not a custodian. In the future I'm sure we'll see fancy > bi-directional payment channels serving this role, but lets not let > perfect be the enemy of good. > > > 2) We have consensus on the semantics of the CLTV opcode > > Pull-req #6124 - the implementation of the opcode itself - was merged > nearly three months ago after significant peer review and discussion. > Part of that review process included myself(1) and mruddy(2) writing > actual demos of CLTV. The chance of the CLTV semantics changing now is > near-zero. > > > 3) We have consensus that Bitcoin should adopt CLTV > > The broad peer review and discussion that got #6124 merged is a clear > sign that we expect CLTV to be eventually adopted. The question isn't if > CLTV should be added to the Bitcoin protocol, but rather when. > > > 4) The CLTV opcode and IsSuperMajority() deployment code has been > thoroughly tested and reviewed > > The opcode implementation is very simple, yet got significant review, > and it has solid test coverage by a suite of tx-(in)valid.json tests. > The tests themselves have been reviewed by others, resulting in Esteban > Ordano's pull-req #6368 by Esteban Ordano which added a few more cases. > > As for the deployment code, both the actual IsSuperMajority() deployment > code and associated unit-tests tests were copied nearly line-by-line > from the succesful BIP66. I did this deliberately to make all the peer > review and testing of the deployment mechanism used in BIP66 be equally > valid for CLTV. > > > 5) We can safely deploy CLTV with IsSuperMajority() > > We've done two soft-forks so far with the IsSuperMajority() mechanism, > BIP34 and BIP66. In both cases the IsSuperMajority() mechanism itself > worked flawlessly. As is well-known BIP66 in combination with a large % > of the hashing power running non-validating "SPV" mining operations did > lead to a temporary fork, however the root cause of this issue is > unavoidable and not unique to IsSuperMajority() soft-forks. > > Pragmatically speaking, now that miners are well aware of the issue it > will be easy for them to avoid a repeat of that fork by simply adding > IsSuperMajority() rules to their "SPV" mining code. Equally turning off > SPV mining (temporarily) is perfectly feasable. > > > 6) We have the necessary consensus to deploy CLTV via IsSuperMajority() > > The various "nVersion bits" proposals - which I am a co-author of - have > the primary advantage of being able to cleanly deal with the case where > a soft-fork fails to get adopted. However, we do have broad consensus, > including across all sides of the blocksize debate, that CLTV should be > adopted. The risk of CLTV failing to get miner adoption, and thus > blocking other soft-forks, is very low. > > > 7) Using IsSuperMajority() to deploy CLTV doesn't limit or delay other > upgrades > > It _is_ possible for multiple IsSuperMajority() soft-forks to coexist, > in the sense that if one soft-fork is "in flight" that doesn't prevent > another soft-fork from also being deployed simultaneously. > > In particular, if we deploy CLTV via IsSuperMajority() that does _not_ > impact the adoption schedule for other future soft-forks, including > soft-forks using a future nVersion bits deployment mechanism. > > For instance, suppose we start deployment of CLTV right now with > nVersion=3D4 blocks. In three months we have 25% miner support, and start > deploying CHECKSEQUENCEVERIFY with nVersion=3D5 blocks. For miners > supporting only OP_CLTV, the nVersion=3D5 blocks still trigger OP_CLTV; > miners creating nVersion=3D5 blocks are simply stating that they support > both soft-forks. Equally, if in three months we finish a nVersion bits > proposal, those miners will be advertising nVersion=3D(1 << 29) blocks, > which also advertise OP_CLTV support. > > > 8) BIP101 miners have not proved to be a problem for CLTV deployment > > While there was concern that BIP101's use of nVersion would cause > issues with a IsSuperMajority() softfork, the % of blocks with BIP101 > nVersion's never reached more than 1%, and currently is hovering at > around 0.1% > > As Gavin Andresen has stated that he is happy to add CLTV to BIP101, and > thus Bitcoin XT, I believe we can expect those miners to safely support > CLTV well before soft-fork enforcement happens. Secondly, the 95% > enforcement threshold means we can tolerate a fairly high % of miners > running pre-CLTV BIP101 implementations without fatal effects in the > unlikely event that those miners don't upgrade. > > > 9) Doing another IsSuperMajority() soft-fork doesn't "burn a bit" > > This is a common myth! All nVersion bits proposals involve permanently > setting a high-order bit to 1, which results in nVersion >=3D all prior > IsSuperMajority() soft-forks. In short, we can do a nearly unlimited > number of IsSuperMajority() soft-forks without affecting future nVersion > bits soft-forks at all. > > > 10) Waiting for nVersion bits and CHECKSEQUENCEVERIFY will significantly > delay deployment of CLTV > > It's been proposed multiple times that we wait until we can do a single > soft-fork with CSV using the nVersion bits mechanism. > > nVersion bits doesn't even have an implementation yet, nor has solid > consensus been reached on the exact semantics of how nVersion bits > should work. The stateful nature of nVersion bits soft-forks requires a > significant amount of new code compared to IsSuperMajority() soft-forks, > which in turn will require a significant amount of testing. (again I'll > point out I'm a co-author to all the nVersion bits proposals) > > CSV has an implementation, but there is still debate going on about what > the exact semantics of it should be. Getting the semantics right is > especially important as part of CSV includes changing the meaning of > nSequence, restricting future uses of that field. There have been many > proposals to use nSequence, e.g. for proof-of-stake blocksize voting, > and it has the unique capability of being a field that is both unused, > and signed by scriptSigs. We shouldn't take potentially restricting > future uses of it lightly. > > CSV is also significantly more complex and invasive than CLTV in terms > of code changes. A large % of the mining power is running forks > of Bitcoin Core with custom changes - modifying these forks with new > features is a labor intensive and slow process. > > If CLTV is ready now, why delay it - potentially for 6-12 months - for > other proposals to catch up? Equally if they do catch up, great! As > explained above an in-flight CLTV soft-fork won't delay future upgrades. > > > 11) Even if CLTV is broken/obsoleted there is very little carrying cost > to having it > > Suppose we decide in two years that CLTV was botched and we need to fix > it. What's the "carrying cost" of having implemented CLTV in the first > place? > > We'll have used up one of our ten soft-forkable NOPs, but if we ever > "run out" it's easy to use extension NOPs(3). Similarly, future script > improvements like OP_MAST - or even a hard-fork - can easily expand the > range of NOPs to the point where this is a non-issue. > > If you don't use OP_CLTV in your scripts there is zero effect on your > transactions; we're not limiting future improvements to Bitcoin in any > way other than using up a NOP by implementing CLTV. > > > References > ---------- > > 1) https://github.com/petertodd/checklocktimeverify-demos > 2) https://github.com/mruddy/bip65-demos > 3) https://github.com/bitcoin/bitcoin/pull/5496#issuecomment-101293403 > 4) https://github.com/bitcoin/bips/blob/master/bip-0112.mediawiki > > -- > 'peter'[:-1]@petertodd.org > 000000000000000006a257845da185433cbde54a74be889b1c046a267dcf4ab2 > > _______________________________________________ > bitcoin-dev mailing list > bitcoin-dev@lists.linuxfoundation.org > https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev > > --001a113f7e7cb8e1e90520c06bd8 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Agree with all CLTV and nVersionBits points. We should dep= loy a lock-time soft-fork ASAP, using the tried and true IsSuperMajoirty te= st.

However your information regarding BIPs 68 (sequence numbers), 1= 12 (checksequenceverify) and 113 (median time past) is outdated. Debate reg= arding semantics has been settled, and there are working implementations re= ady for merge on github. See pull requests #6312, #6564, and #6566. I don= =E2=80=99t know what the hold up has been regarding further reviews and mer= ging, but it is ready.

If you believe there are reasons #6312, #6564= , or #6566 should not be merged, please speak up. Otherwise it appears ther= e is consensus on these changes. They are related, and there is no reason n= ot to include them in the soft-fork, delaying applications using these feat= ures by 6-12 months.

On Sun, Sep 27, 2015 at 11:50 AM, Peter Todd via bitcoin-dev <bitcoin-dev@lists.linuxfoundation.org> wrote:<= br>
Summary
-------

It's time to deploy BIP65 CHECKLOCKTIMEVERIFY.

I've backported the CLTV op-code and a IsSuperMajority() soft-fork to the v0.10 and v0.11 branches, pull-reqs #6706 and #6707 respectively. A
pull-req for git HEAD for the soft-fork deployment has been open since
June 28th, #6351 - the opcode implementation itself was merged two
months ago.

We should release a v0.10.3 and v0.11.1 with CLTV and get the ball
rolling on miner adoption. We have consensus that we need CLTV, we have
a well tested implementation, and we have a well-tested deployment
mechanism. We also don't need to wait for other soft-fork proposals to<= br> catch up - starting the CLTV deployment process isn't going to delay future soft-forks, or for that matter, hard-forks.

I think it's possible to safely get CLTV live on mainnet before the end=
of the year. It's time we get this over with and done.


Detailed Rational
-----------------

1) There is a clear need for CLTV

Escrow and payment channels both benefit greatly from CLTV. In
particular, payment channel implementations are made significantly
simpler with CLTV, as well as more secure by removing the malleability
vulnerability.

Why are payment channels important? There's a lot of BTC out there
vulnerable to theft that doesn't have to be. For example, just the othe= r
day I was talking with Nick Sullivan about ChangeTip's vulnerability to=
theft, as well as regulatory uncertainty about whether or not they're a=
custodian of their users' funds. With payment channels ChangeTip would<= br> only be able to spend as much of a deposit as a user had spent, keeping
the rest safe from theft. Similarly, in the other direction - ChangeTip
to their users - in many cases it is feasible to also use payment
channels to immediately give users control of their funds as they
receive them, again protecting users and helping make the case that
they're not a custodian. In the future I'm sure we'll see fancy=
bi-directional payment channels serving this role, but lets not let
perfect be the enemy of good.


2) We have consensus on the semantics of the CLTV opcode

Pull-req #6124 - the implementation of the opcode itself - was merged
nearly three months ago after significant peer review and discussion.
Part of that review process included myself(1) and mruddy(2) writing
actual demos of CLTV. The chance of the CLTV semantics changing now is
near-zero.


3) We have consensus that Bitcoin should adopt CLTV

The broad peer review and discussion that got #6124 merged is a clear
sign that we expect CLTV to be eventually adopted. The question isn't i= f
CLTV should be added to the Bitcoin protocol, but rather when.


4) The CLTV opcode and IsSuperMajority() deployment code has been
=C2=A0 =C2=A0thoroughly tested and reviewed

The opcode implementation is very simple, yet got significant review,
and it has solid test coverage by a suite of tx-(in)valid.json tests.
The tests themselves have been reviewed by others, resulting in Esteban
Ordano's pull-req #6368 by Esteban Ordano which added a few more cases.=

As for the deployment code, both the actual IsSuperMajority() deployment code and associated unit-tests tests were copied nearly line-by-line
from the succesful BIP66. I did this deliberately to make all the peer
review and testing of the deployment mechanism used in BIP66 be equally
valid for CLTV.


5) We can safely deploy CLTV with IsSuperMajority()

We've done two soft-forks so far with the IsSuperMajority() mechanism,<= br> BIP34 and BIP66. In both cases the IsSuperMajority() mechanism itself
worked flawlessly. As is well-known BIP66 in combination with a large %
of the hashing power running non-validating "SPV" mining operatio= ns did
lead to a temporary fork, however the root cause of this issue is
unavoidable and not unique to IsSuperMajority() soft-forks.

Pragmatically speaking, now that miners are well aware of the issue it
will be easy for them to avoid a repeat of that fork by simply adding
IsSuperMajority() rules to their "SPV" mining code. Equally turni= ng off
SPV mining (temporarily) is perfectly feasable.


6) We have the necessary consensus to deploy CLTV via IsSuperMajority()

The various "nVersion bits" proposals - which I am a co-author of= - have
the primary advantage of being able to cleanly deal with the case where
a soft-fork fails to get adopted. However, we do have broad consensus,
including across all sides of the blocksize debate, that CLTV should be
adopted. The risk of CLTV failing to get miner adoption, and thus
blocking other soft-forks, is very low.


7) Using IsSuperMajority() to deploy CLTV doesn't limit or delay other = upgrades

It _is_ possible for multiple IsSuperMajority() soft-forks to coexist,
in the sense that if one soft-fork is "in flight" that doesn'= t prevent
another soft-fork from also being deployed simultaneously.

In particular, if we deploy CLTV via IsSuperMajority() that does _not_
impact the adoption schedule for other future soft-forks, including
soft-forks using a future nVersion bits deployment mechanism.

For instance, suppose we start deployment of CLTV right now with
nVersion=3D4 blocks. In three months we have 25% miner support, and start deploying CHECKSEQUENCEVERIFY with nVersion=3D5 blocks. For miners
supporting only OP_CLTV, the nVersion=3D5 blocks still trigger OP_CLTV;
miners creating nVersion=3D5 blocks are simply stating that they support both soft-forks. Equally, if in three months we finish a nVersion bits
proposal, those miners will be advertising nVersion=3D(1 << 29) block= s,
which also advertise OP_CLTV support.


8) BIP101 miners have not proved to be a problem for CLTV deployment

While there was concern that BIP101's use of nVersion would cause
issues with a IsSuperMajority() softfork, the % of blocks with BIP101
nVersion's never reached more than 1%, and currently is hovering at
around 0.1%

As Gavin Andresen has stated that he is happy to add CLTV to BIP101, and thus Bitcoin XT, I believe we can expect those miners to safely support
CLTV well before soft-fork enforcement happens. Secondly, the 95%
enforcement threshold means we can tolerate a fairly high % of miners
running pre-CLTV BIP101 implementations without fatal effects in the
unlikely event that those miners don't upgrade.


9) Doing another IsSuperMajority() soft-fork doesn't "burn a bit&q= uot;

This is a common myth! All nVersion bits proposals involve permanently
setting a high-order bit to 1, which results in nVersion >=3D all prior<= br> IsSuperMajority() soft-forks. In short, we can do a nearly unlimited
number of IsSuperMajority() soft-forks without affecting future nVersion bits soft-forks at all.


10) Waiting for nVersion bits and CHECKSEQUENCEVERIFY will significantly =C2=A0 =C2=A0 delay deployment of CLTV

It's been proposed multiple times that we wait until we can do a single=
soft-fork with CSV using the nVersion bits mechanism.

nVersion bits doesn't even have an implementation yet, nor has solid consensus been reached on the exact semantics of how nVersion bits
should work. The stateful nature of nVersion bits soft-forks requires a
significant amount of new code compared to IsSuperMajority() soft-forks, which in turn will require a significant amount of testing. (again I'll=
point out I'm a co-author to all the nVersion bits proposals)

CSV has an implementation, but there is still debate going on about what the exact semantics of it should be. Getting the semantics right is
especially important as part of CSV includes changing the meaning of
nSequence, restricting future uses of that field. There have been many
proposals to use nSequence, e.g. for proof-of-stake blocksize voting,
and it has the unique capability of being a field that is both unused,
and signed by scriptSigs. We shouldn't take potentially restricting
future uses of it lightly.

CSV is also significantly more complex and invasive than CLTV in terms
of code changes. A large % of the mining power is running forks
of Bitcoin Core with custom changes - modifying these forks with new
features is a labor intensive and slow process.

If CLTV is ready now, why delay it - potentially for 6-12 months - for
other proposals to catch up? Equally if they do catch up, great! As
explained above an in-flight CLTV soft-fork won't delay future upgrades= .


11) Even if CLTV is broken/obsoleted there is very little carrying cost
=C2=A0 =C2=A0 to having it

Suppose we decide in two years that CLTV was botched and we need to fix
it. What's the "carrying cost" of having implemented CLTV in = the first
place?

We'll have used up one of our ten soft-forkable NOPs, but if we ever "run out" it's easy to use extension NOPs(3). Similarly, futu= re script
improvements like OP_MAST - or even a hard-fork - can easily expand the
range of NOPs to the point where this is a non-issue.

If you don't use OP_CLTV in your scripts there is zero effect on your transactions; we're not limiting future improvements to Bitcoin in any<= br> way other than using up a NOP by implementing CLTV.


References
----------

1) https://github.com/petertodd/checklocktim= everify-demos
2) https://github.com/mruddy/bip65-demos
3) https://github.com/bitcoin/bit= coin/pull/5496#issuecomment-101293403
4) https://github.com/bitcoin/bips/blo= b/master/bip-0112.mediawiki

--
'peter'[:-1]@petertodd.org
000000000000000006a257845da185433cbde54a74be889b1c046a267dcf4ab2

_______________________________________________
bitcoin-dev mailing list
bitcoin-dev@lists.= linuxfoundation.org
https://lists.linuxfoundation.org/mail= man/listinfo/bitcoin-dev


--001a113f7e7cb8e1e90520c06bd8--