Re: [Bitcoin-development] BIP70 proposed changes

2014-02-19 Thread Jeff Garzik
On Tue, Feb 18, 2014 at 4:40 PM, Andreas Schildbach
andr...@schildbach.de wrote:
 On 02/18/2014 08:14 PM, Ryan X. Charles wrote:
 BitPay is working on a new standard
 based on bitcoin-like addresses for authentication. It would be great if
 we could work with the community to establish a complete, decentralized
 authentication protocol.

 Sounds interesting, let us know as soon as you have anything.

SINs.  See https://en.bitcoin.it/wiki/Identity_protocol_v1

-- 
Jeff Garzik
Bitcoin core developer and open source evangelist
BitPay, Inc.  https://bitpay.com/

--
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471iu=/4140/ostg.clktrk
___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] [RFC] [BIP proposal] Dealing with malleability

2014-02-19 Thread Michael Gronager
Why introduce a new transaction version for this purpose ? Wouldn't it be more 
elegant to simply let:

1. the next bitcoin version prettify all relayed transactions as 
deterministic transactions fulfilling the scheme 1-6 effectively blocking any 
malleability attack? If miners would upgrade then all transactions in blocks 
would have a deterministic hash. 

2. In a version later one could block relay of non deterministic transactions, 
as well as the acceptance of blocks with non-confirming transactions.

To non-standard conforming clients this prettify change of hash would be seen 
as a constant malleability attack, but given the prettify code it is to fix 
any client into producing only conforming transactions, just by running the 
transaction through it before broadcast.

There is a possible fork risk in step 2. above - if a majority of miners still 
havn't upgraded to 1 when 2 is introduced. We could monitor % non conforming 
transaction in a block and only introduce 2. once that number is sufficiently 
small for a certain duration - criteria:
* Switch on forcing of unmalleable transactions in blocks when there has been 
only conforming transactions for 1000 blocks.


On Feb 13, 2014, at 1:47 AM, Gregory Maxwell gmaxw...@gmail.com wrote:

 On Wed, Feb 12, 2014 at 4:39 PM, Alex Morcos mor...@gmail.com wrote:
 I apologize if this has been discussed many times before.
 
 It has been, but there are probably many people like you who have not
 bothered researching who may also be curious.
 
 As a long term solution to malleable transactions, wouldn't it be possible
 to modify the signatures to be of the entire transaction.  Why do you have
 to zero out the inputs?  I can see that this would be a hard fork, and maybe
 it would be somewhat tricky to extract signatures first (since you can sign
 everything except the signatures), but it would seem to me that this is an
 important enough change to consider making.
 
 Because doing so would be both unnecessary and ineffective.
 
 Unnecessary because we can very likely eliminate malleability without
 changing what is signed. It will take time, but we have been
 incrementally moving towards that, e.g. v0.8 made many kinds of
 non-canonical encoding non-standard.
 
 Ineffective— at least as you describe it— because the signatures
 _themselves_ are malleable.
 
 --
 Android apps run on BlackBerry 10
 Introducing the new BlackBerry 10.2.1 Runtime for Android apps.
 Now with support for Jelly Bean, Bluetooth, Mapview and more.
 Get your Android app in front of a whole new audience.  Start now.
 http://pubads.g.doubleclick.net/gampad/clk?id=124407151iu=/4140/ostg.clktrk
 ___
 Bitcoin-development mailing list
 Bitcoin-development@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/bitcoin-development



signature.asc
Description: Message signed with OpenPGP using GPGMail
--
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471iu=/4140/ostg.clktrk___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] [RFC] [BIP proposal] Dealing with malleability

2014-02-19 Thread Pieter Wuille
On Wed, Feb 19, 2014 at 3:11 PM, Michael Gronager grona...@mac.com wrote:
 Why introduce a new transaction version for this purpose ? Wouldn't it be 
 more elegant to simply let:

 1. the next bitcoin version prettify all relayed transactions as 
 deterministic transactions fulfilling the scheme 1-6 effectively blocking any 
 malleability attack? If miners would upgrade then all transactions in blocks 
 would have a deterministic hash.

I consider actively mutating other's transactions worse than not
relaying them. If we want people to make their software deal with
malleability, either will work.

Regarding deterministic hash: that's impossible. Some signature hash
types are inherently (and intentionally) malleable. I don't think we
should pretend to want to change that. The purpose is making
non-malleability a choice the sender of a transaction can make.

Most of the rules actually are enforced by IsStandard already now.
Only #1 and #7 aren't. #1 affects the majority of all transactions, so
changing it right now would be painful. #7 only affects multisig.

 2. In a version later one could block relay of non deterministic 
 transactions, as well as the acceptance of blocks with non-confirming 
 transactions.

 To non-standard conforming clients this prettify change of hash would be 
 seen as a constant malleability attack, but given the prettify code it is 
 to fix any client into producing only conforming transactions, just by 
 running the transaction through it before broadcast.

 There is a possible fork risk in step 2. above - if a majority of miners 
 still havn't upgraded to 1 when 2 is introduced. We could monitor % non 
 conforming transaction in a block and only introduce 2. once that number is 
 sufficiently small for a certain duration - criteria:
 * Switch on forcing of unmalleable transactions in blocks when there has been 
 only conforming transactions for 1000 blocks.

The problem in making these rules into consensus rule (affecting
tx/block validity) is that some rules (in particular #3) may not be
wanted by everyone, as they effectively limit the possibilities of the
script language further. As it is ultimately only about protecting
senders who care about non-malleability, introducing a new transaction
version is a very neat way of accomplishing that. The new block
version number is only there to coordinate the rollout, and choosing
an automatic forking point.

-- 
Pieter

--
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471iu=/4140/ostg.clktrk
___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] BIP70 proposed changes

2014-02-19 Thread Mike Hearn
Thanks for the feedback guys!

I would also like to understand the problems you've been having with
certificates in node.js. FYI the CA cert is *not* supposed to be included,
this matches what the code in Bitcoin Core and bitcoinj expects. It may be
that Bitcoin Core accepts a redundant CA cert being provided, but if so
that'd fall in the category of openssl being generous. If there are issues
here, it sounds like an issue with node and not the spec. I'm not even sure
why it would matter - certs are just byte arrays so if node can sign a hash
with a private key, the rest should be easy.

With regards to the PKI I'd appreciate it if we don't go around that circle
again. Please remember one of the primary goals of all of this is to show
to the user on their hardware wallet a meaningful name. Almost all
merchants on the Internet already went through the process of associating a
public key with their name, using X.509.

Whilst for now your payment requests will have to be signed as BitPay, this
isn't ideal for the longer term and I'd like to design a protocol extension
to allow merchants to delegate their signature authority to you. In this
way they would be able to sign a secondary key with their own ssl key as
part of the enrolment process, and after that you could sign payment
requests on their behalf. Kind of like a Bitcoin  specific subcert (and
there would be no reason to use X.509 format for that).

Re: feedback url. How is this different to a result code in PaymentAck
which already caused much debate? Surely we want a payment to either work
out boy work and for that decision to be made immediately? Your invoice
page switches to a completed state once you see a tx be broadcast so that's
the done state today even if there are caveats. I'd like to see a status
code added to PaymentAck so receivers can reject payments if they are bad
in some way.
 On 19 Feb 2014 19:41, Jeff Garzik jgar...@bitpay.com wrote:

 On Tue, Feb 18, 2014 at 4:40 PM, Andreas Schildbach
 andr...@schildbach.de wrote:
  On 02/18/2014 08:14 PM, Ryan X. Charles wrote:
  BitPay is working on a new standard
  based on bitcoin-like addresses for authentication. It would be great if
  we could work with the community to establish a complete, decentralized
  authentication protocol.
 
  Sounds interesting, let us know as soon as you have anything.

 SINs.  See https://en.bitcoin.it/wiki/Identity_protocol_v1

 --
 Jeff Garzik
 Bitcoin core developer and open source evangelist
 BitPay, Inc.  https://bitpay.com/


 --
 Managing the Performance of Cloud-Based Applications
 Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
 Read the Whitepaper.

 http://pubads.g.doubleclick.net/gampad/clk?id=121054471iu=/4140/ostg.clktrk
 ___
 Bitcoin-development mailing list
 Bitcoin-development@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/bitcoin-development

--
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471iu=/4140/ostg.clktrk___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] [RFC] [BIP proposal] Dealing with malleability

2014-02-19 Thread Jeremy Spilman


Longer term it would be more ideal have a canonical identifier for the transaction before it even gets to the chain to support these use cases, even if wallets are able to properly identify the status of it's transactions. 
-Allen
One possible work-around to get back trusted transaction chaining for payment channels and locked refunds from multi-sig would be to make the initial transaction include zero fee, and depend on child-pays-for-parent in order to get the first and follow-on transactions into a block. This of course only works for protocols where the parties don't need the initial funding transaction to actually hit the blockchain right away.But this relies on two assumptions; 1) that miners won't include a zero-fee transaction in the blockchain, and 2) that miners actually implement child-pays-for-parent. It's definitely not the same security as-if you had immutable txid, but it's something to consider.
1) Mutants may cause wallet spam and difficulty calculating balance (and wallets will evolve to deal with it)2) Mutants cause DoS because they can interfere with your own transaction chains, which for example makes batch off-line processing much more difficult3) Mutants introduce a 3rd party attacker into any two-party protocol that relies on chainsThere's a lot to digest in the 'v3' transaction/block proposal. It sounds like there may be some uncertainty over whether we can *prove* that v3 transactions in v3 blocks would actually be guaranteed immutable with these changes?If we cannot fully prove a Tx is immutable, then is it actually worth taking steps to make it seem immutable, or is that just a false sense of security in the cases where chained transactions were actually expected to be reliable? Under that thinking, maybe it's best to accept mutants as a fact of life, and only consider protocols and techniques that cannot be broken by mutants.In what cases does reducing the sources of malleability, but not necessarily eliminating from a security proof perspective, actually help? Basically, if we don't know that we will succeed, isn't there really no point in trying?--
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471iu=/4140/ostg.clktrk___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] [RFC] [BIP proposal] Dealing with malleability

2014-02-19 Thread Michael Gronager
Twisting your words a bit I read:

* you want to support relay of transactions that can be changed on the fly, but 
you consider it wrong to modify them.
* #3 is already not forwarded, but you still find it relevant to support it.

Rational use cases of #3 will be pretty hard to find given the fact that they 
can be changed on the fly. We are down to inclusion in blocks by miners for 
special purposes - or did I miss out something?

I think that we could guarantee fewer incidents by making version 1 
transactions unmalleable and then optionally introduce a version 3 that 
supported the malleability feature. That way most existing problematic 
implementations would be fixed and no doors were closed for people 
experimenting with other stuff - tx v 3 would probably then be called 
experimental transactions.

/M


On Feb 19, 2014, at 3:38 PM, Pieter Wuille pieter.wui...@gmail.com wrote:

 On Wed, Feb 19, 2014 at 3:11 PM, Michael Gronager grona...@mac.com wrote:
 Why introduce a new transaction version for this purpose ? Wouldn't it be 
 more elegant to simply let:
 
 1. the next bitcoin version prettify all relayed transactions as 
 deterministic transactions fulfilling the scheme 1-6 effectively blocking 
 any malleability attack? If miners would upgrade then all transactions in 
 blocks would have a deterministic hash.
 
 I consider actively mutating other's transactions worse than not
 relaying them. If we want people to make their software deal with
 malleability, either will work.
 
 Regarding deterministic hash: that's impossible. Some signature hash
 types are inherently (and intentionally) malleable. I don't think we
 should pretend to want to change that. The purpose is making
 non-malleability a choice the sender of a transaction can make.
 
 Most of the rules actually are enforced by IsStandard already now.
 Only #1 and #7 aren't. #1 affects the majority of all transactions, so
 changing it right now would be painful. #7 only affects multisig.
 
 2. In a version later one could block relay of non deterministic 
 transactions, as well as the acceptance of blocks with non-confirming 
 transactions.
 
 To non-standard conforming clients this prettify change of hash would be 
 seen as a constant malleability attack, but given the prettify code it is 
 to fix any client into producing only conforming transactions, just by 
 running the transaction through it before broadcast.
 
 There is a possible fork risk in step 2. above - if a majority of miners 
 still havn't upgraded to 1 when 2 is introduced. We could monitor % non 
 conforming transaction in a block and only introduce 2. once that number is 
 sufficiently small for a certain duration - criteria:
 * Switch on forcing of unmalleable transactions in blocks when there has 
 been only conforming transactions for 1000 blocks.
 
 The problem in making these rules into consensus rule (affecting
 tx/block validity) is that some rules (in particular #3) may not be
 wanted by everyone, as they effectively limit the possibilities of the
 script language further. As it is ultimately only about protecting
 senders who care about non-malleability, introducing a new transaction
 version is a very neat way of accomplishing that. The new block
 version number is only there to coordinate the rollout, and choosing
 an automatic forking point.
 
 -- 
 Pieter



signature.asc
Description: Message signed with OpenPGP using GPGMail
--
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471iu=/4140/ostg.clktrk___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] [RFC] [BIP proposal] Dealing with malleability

2014-02-19 Thread Gregory Maxwell
On Wed, Feb 19, 2014 at 12:28 PM, Michael Gronager grona...@mac.com wrote:
 Twisting your words a bit I read:

 * you want to support relay of transactions that can be changed on the fly, 
 but you consider it wrong to modify them.
 * #3 is already not forwarded, but you still find it relevant to support it.

 Rational use cases of #3 will be pretty hard to find given the fact that they 
 can be changed on the fly. We are down to inclusion in blocks by miners for 
 special purposes - or did I miss out something?

You did. See the other sighash flags.

 I think that we could guarantee fewer incidents by making version 1 
 transactions unmalleable and then optionally introduce a version 3 that 
 supported the malleability feature. That way most existing problematic 
 implementations would be fixed and no doors were closed for people 
 experimenting with other stuff - tx v 3 would probably then be called 
 experimental transactions.

In exchange you make the behavior basically impossible do deploy
without first blocking all ongoing transactions. This seems foolish.
All signers need to be updated to change their behavior to be
anti-malleability compatible, they can change their version at the
same time... and leave things actually working for the things which
can't be easily updated.

--
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471iu=/4140/ostg.clktrk
___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] [RFC] [BIP proposal] Dealing with malleability

2014-02-19 Thread Peter Todd
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA256

While we might be able to get away with a retroactive change in meaning right 
now in the future that won't be so easy. There are lots if proposed 
applications for nLockTime-using protocols that depend on transactions (or 
parts of transactions) being possible to mine as is. Making existing 
transactions impossible to mine in the future will break those types of 
applications. We might as well use this as a learning experience for what a 
version bump would look like infrastructures wise.

Note how the above is a particularly bad example of gmaxwell's generic don't 
break things objection. Equally, remember that lots of infrastructure *does* 
handle malleability just fine already.

On February 19, 2014 3:28:24 PM EST, Michael Gronager grona...@mac.com wrote:
Twisting your words a bit I read:

* you want to support relay of transactions that can be changed on the
fly, but you consider it wrong to modify them.
* #3 is already not forwarded, but you still find it relevant to
support it.

Rational use cases of #3 will be pretty hard to find given the fact
that they can be changed on the fly. We are down to inclusion in blocks
by miners for special purposes - or did I miss out something?

I think that we could guarantee fewer incidents by making version 1
transactions unmalleable and then optionally introduce a version 3 that
supported the malleability feature. That way most existing problematic
implementations would be fixed and no doors were closed for people
experimenting with other stuff - tx v 3 would probably then be called
experimental transactions.

/M


On Feb 19, 2014, at 3:38 PM, Pieter Wuille pieter.wui...@gmail.com
wrote:

 On Wed, Feb 19, 2014 at 3:11 PM, Michael Gronager grona...@mac.com
wrote:
 Why introduce a new transaction version for this purpose ? Wouldn't
it be more elegant to simply let:

 1. the next bitcoin version prettify all relayed transactions as
deterministic transactions fulfilling the scheme 1-6 effectively
blocking any malleability attack? If miners would upgrade then all
transactions in blocks would have a deterministic hash.

 I consider actively mutating other's transactions worse than not
 relaying them. If we want people to make their software deal with
 malleability, either will work.

 Regarding deterministic hash: that's impossible. Some signature hash
 types are inherently (and intentionally) malleable. I don't think we
 should pretend to want to change that. The purpose is making
 non-malleability a choice the sender of a transaction can make.

 Most of the rules actually are enforced by IsStandard already now.
 Only #1 and #7 aren't. #1 affects the majority of all transactions,
so
 changing it right now would be painful. #7 only affects multisig.

 2. In a version later one could block relay of non deterministic
transactions, as well as the acceptance of blocks with non-confirming
transactions.

 To non-standard conforming clients this prettify change of hash
would be seen as a constant malleability attack, but given the
prettify code it is to fix any client into producing only conforming
transactions, just by running the transaction through it before
broadcast.

 There is a possible fork risk in step 2. above - if a majority of
miners still havn't upgraded to 1 when 2 is introduced. We could
monitor % non conforming transaction in a block and only introduce 2.
once that number is sufficiently small for a certain duration -
criteria:
 * Switch on forcing of unmalleable transactions in blocks when there
has been only conforming transactions for 1000 blocks.

 The problem in making these rules into consensus rule (affecting
 tx/block validity) is that some rules (in particular #3) may not be
 wanted by everyone, as they effectively limit the possibilities of
the
 script language further. As it is ultimately only about protecting
 senders who care about non-malleability, introducing a new
transaction
 version is a very neat way of accomplishing that. The new block
 version number is only there to coordinate the rollout, and choosing
 an automatic forking point.

 --
 Pieter





--
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471iu=/4140/ostg.clktrk



___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development
-BEGIN PGP SIGNATURE-
Version: APG v1.0.9

iQFQBAEBCAA6BQJTBRjcMxxQZXRlciBUb2RkIChsb3cgc2VjdXJpdHkga2V5KSA8
cGV0ZUBwZXRlcnRvZGQub3JnPgAKCRAZnIM7qOfwhbuuCADHHZvCbWNR+hj3lq2u

Re: [Bitcoin-development] [RFC] [BIP proposal] Dealing with malleability

2014-02-19 Thread Gregory Maxwell
dOn Wed, Feb 19, 2014 at 12:49 PM, Peter Todd p...@petertodd.org wrote:
 While we might be able to get away with a retroactive change in meaning right 
 now in the future that won't be so easy. There are lots if proposed 
 applications for nLockTime-using protocols that depend on transactions (or 
 parts of transactions) being possible to mine as is. Making existing 
 transactions impossible to mine in the future will break those types of 
 applications. We might as well use this as a learning experience for what a 
 version bump would look like infrastructures wise.

For some reason it took me a couple reads to get this so I thought I'd
restate it in a more blunt form.

There may exist people today who have send funds to addresses,
authored nlocktime releases, and destroyed the key the funds are at
now in order to achieve a timelock.  This might be a foolish thing to
do, but it's the kind of thing that you have to worry about when
potentially breaking existing transactions.

(This kind of us is, fwiw, another example of why ANYONE_CAN_PAY is useful).

--
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471iu=/4140/ostg.clktrk
___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] [RFC] [BIP proposal] Dealing with malleability

2014-02-19 Thread Pieter Wuille
On Wed, Feb 19, 2014 at 9:28 PM, Michael Gronager grona...@mac.com wrote:
 I think that we could guarantee fewer incidents by making version 1 
 transactions unmalleable and then optionally introduce a version 3 that 
 supported the malleability feature. That way most existing problematic 
 implementations would be fixed and no doors were closed for people 
 experimenting with other stuff - tx v 3 would probably then be called 
 experimental transactions.

Just to be clear: this change is not directly intended to avoid
incidents. It will take way too long to deploy this. Software should
deal with malleability. This is a longer-term solution intended to
provide non-malleability guarantees for clients that a) are upgraded
to use them  b) willing to restrict their functionality. As there are
several intended use cases for malleable transactions (the sighash
flags pretty directly are a way to signify what malleabilities are
*wanted*), this is not about outlawing malleability.

While we could right now make all these rules non-standard, and
schedule a soft fork in a year or so to make them illegal, it would
mean removing potential functionality that can only be re-enabled
through a hard fork. This is significantly harder, so we should think
about it very well in advance.

About new transaction and block versions: this allows implementing and
automatically scheduling a softfork without waiting for wallets to
upgrade. The non-DER signature change was discussed for over two
years, and implemented almost a year ago, and we still notice wallets
that don't support it. We can't expect every wallet to be instantly
modified (what about hardware wallets like the Trezor, for example?
they may not just be able to be upgraded). Nor is it necessary: if
your software only spends confirmed change, and tracks all debits
correctly, there is no need.

-- 
Pieter

--
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471iu=/4140/ostg.clktrk
___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] [RFC] [BIP proposal] Dealing with malleability

2014-02-19 Thread Natanael
Regarding chains of transactions intended to be published at once together,
wouldn't it be easier to add a only-mine-with-child flag?

That way the parent transactions aren't actually valid unless spent
together with the transaction that depends on it, and only the original
will have a child referencing it.

Then malleability is not an issue at all for transaction chains if you only
need to broadcast your full transaction chain once, and don't need to
extend it in two or more occasions, *after* broadcasting subchains to the
network, from the same set of pregenerated transactions.

If you need to broadcast pregenerated subchains separately, then you need
the last child in the chain to be non-malleable.

This would require all miners to start to respect it at once in order to
avoid forking the network.

- Sent from my phone
Den 19 feb 2014 22:13 skrev Pieter Wuille pieter.wui...@gmail.com:

 On Wed, Feb 19, 2014 at 9:28 PM, Michael Gronager grona...@mac.com
 wrote:
  I think that we could guarantee fewer incidents by making version 1
 transactions unmalleable and then optionally introduce a version 3 that
 supported the malleability feature. That way most existing problematic
 implementations would be fixed and no doors were closed for people
 experimenting with other stuff - tx v 3 would probably then be called
 experimental transactions.

 Just to be clear: this change is not directly intended to avoid
 incidents. It will take way too long to deploy this. Software should
 deal with malleability. This is a longer-term solution intended to
 provide non-malleability guarantees for clients that a) are upgraded
 to use them  b) willing to restrict their functionality. As there are
 several intended use cases for malleable transactions (the sighash
 flags pretty directly are a way to signify what malleabilities are
 *wanted*), this is not about outlawing malleability.

 While we could right now make all these rules non-standard, and
 schedule a soft fork in a year or so to make them illegal, it would
 mean removing potential functionality that can only be re-enabled
 through a hard fork. This is significantly harder, so we should think
 about it very well in advance.

 About new transaction and block versions: this allows implementing and
 automatically scheduling a softfork without waiting for wallets to
 upgrade. The non-DER signature change was discussed for over two
 years, and implemented almost a year ago, and we still notice wallets
 that don't support it. We can't expect every wallet to be instantly
 modified (what about hardware wallets like the Trezor, for example?
 they may not just be able to be upgraded). Nor is it necessary: if
 your software only spends confirmed change, and tracks all debits
 correctly, there is no need.

 --
 Pieter


 --
 Managing the Performance of Cloud-Based Applications
 Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
 Read the Whitepaper.

 http://pubads.g.doubleclick.net/gampad/clk?id=121054471iu=/4140/ostg.clktrk
 ___
 Bitcoin-development mailing list
 Bitcoin-development@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/bitcoin-development

--
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471iu=/4140/ostg.clktrk___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bitcoin-development


Re: [Bitcoin-development] [RFC] [BIP proposal] Dealing with malleability

2014-02-19 Thread Allen Piscitello
This is somewhat problematic in my use case since some parts need to be in
the chain earlier than others and have the same ID as expected.

https://bitcointalk.org/index.php?topic=260898.10

I haven't gone back to see if there are any ways around it, but the main
problem here is I need the Contract TX to be in the chain much earlier than
redeeming, but I need the refund transaction to be in the chain much
earlier.  Perhaps there are some tricks to pull off to get it to work, but
I haven't been working on this for a while so I'm a bit rusty in that area.

This might be helpful enough to help a lot of use cases, but shouldn't be
final.

-Allen

On Wed, Feb 19, 2014 at 6:22 PM, Natanael natanae...@gmail.com wrote:

 Regarding chains of transactions intended to be published at once
 together, wouldn't it be easier to add a only-mine-with-child flag?

 That way the parent transactions aren't actually valid unless spent
 together with the transaction that depends on it, and only the original
 will have a child referencing it.

 Then malleability is not an issue at all for transaction chains if you
 only need to broadcast your full transaction chain once, and don't need to
 extend it in two or more occasions, *after* broadcasting subchains to the
 network, from the same set of pregenerated transactions.

 If you need to broadcast pregenerated subchains separately, then you need
 the last child in the chain to be non-malleable.

 This would require all miners to start to respect it at once in order to
 avoid forking the network.

 - Sent from my phone
 Den 19 feb 2014 22:13 skrev Pieter Wuille pieter.wui...@gmail.com:

 On Wed, Feb 19, 2014 at 9:28 PM, Michael Gronager grona...@mac.com
 wrote:
  I think that we could guarantee fewer incidents by making version 1
 transactions unmalleable and then optionally introduce a version 3 that
 supported the malleability feature. That way most existing problematic
 implementations would be fixed and no doors were closed for people
 experimenting with other stuff - tx v 3 would probably then be called
 experimental transactions.

 Just to be clear: this change is not directly intended to avoid
 incidents. It will take way too long to deploy this. Software should
 deal with malleability. This is a longer-term solution intended to
 provide non-malleability guarantees for clients that a) are upgraded
 to use them  b) willing to restrict their functionality. As there are
 several intended use cases for malleable transactions (the sighash
 flags pretty directly are a way to signify what malleabilities are
 *wanted*), this is not about outlawing malleability.

 While we could right now make all these rules non-standard, and
 schedule a soft fork in a year or so to make them illegal, it would
 mean removing potential functionality that can only be re-enabled
 through a hard fork. This is significantly harder, so we should think
 about it very well in advance.

 About new transaction and block versions: this allows implementing and
 automatically scheduling a softfork without waiting for wallets to
 upgrade. The non-DER signature change was discussed for over two
 years, and implemented almost a year ago, and we still notice wallets
 that don't support it. We can't expect every wallet to be instantly
 modified (what about hardware wallets like the Trezor, for example?
 they may not just be able to be upgraded). Nor is it necessary: if
 your software only spends confirmed change, and tracks all debits
 correctly, there is no need.

 --
 Pieter


 --
 Managing the Performance of Cloud-Based Applications
 Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
 Read the Whitepaper.

 http://pubads.g.doubleclick.net/gampad/clk?id=121054471iu=/4140/ostg.clktrk
 ___
 Bitcoin-development mailing list
 Bitcoin-development@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/bitcoin-development



 --
 Managing the Performance of Cloud-Based Applications
 Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
 Read the Whitepaper.

 http://pubads.g.doubleclick.net/gampad/clk?id=121054471iu=/4140/ostg.clktrk
 ___
 Bitcoin-development mailing list
 Bitcoin-development@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/bitcoin-development


--
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471iu=/4140/ostg.clktrk___
Bitcoin-development mailing list
Bitcoin-development@lists.sourceforge.net

Re: [Bitcoin-development] [RFC] [BIP proposal] Dealing with malleability

2014-02-19 Thread Natanael
You could pregenerate entire trees of alternative outcomes where you pick
one branch / chain to broadcast based on the real world events as they
happen.

But I see another problem regarding use of oracles, if you have a P2SH
address with 2-of-3 signatures or similar in the chain, amd some
transactions following it, then the oracle needs to pregenerate both
transactions for both outcomes in advance. But the oracle probably don't
want to actually share it in advance to any third party before the event
happened.

This can be solved if the oracle only shares the transaction hash in
advance and then hands out a Zero-knowledge proof of that transaction with
the given hash is following the agreed upon rules, so you can trust the
transaction chain anyway and still being able to pregenerate a full tree of
transactions.

And then the oracle will release one of the possible transactions after the
event in question has happened, so you can broadcast the chain of choice.

This unfortunately breaks down if the number of possible outcomes becomes
too many as you would need to both generate and store a tree of possible
outcomes that is massive.

- Sent from my phone
Den 20 feb 2014 02:29 skrev Allen Piscitello allen.piscite...@gmail.com:

 This is somewhat problematic in my use case since some parts need to be in
 the chain earlier than others and have the same ID as expected.

 https://bitcointalk.org/index.php?topic=260898.10

 I haven't gone back to see if there are any ways around it, but the main
 problem here is I need the Contract TX to be in the chain much earlier than
 redeeming, but I need the refund transaction to be in the chain much
 earlier.  Perhaps there are some tricks to pull off to get it to work, but
 I haven't been working on this for a while so I'm a bit rusty in that area.

 This might be helpful enough to help a lot of use cases, but shouldn't be
 final.

 -Allen

 On Wed, Feb 19, 2014 at 6:22 PM, Natanael natanae...@gmail.com wrote:

 Regarding chains of transactions intended to be published at once
 together, wouldn't it be easier to add a only-mine-with-child flag?

 That way the parent transactions aren't actually valid unless spent
 together with the transaction that depends on it, and only the original
 will have a child referencing it.

 Then malleability is not an issue at all for transaction chains if you
 only need to broadcast your full transaction chain once, and don't need to
 extend it in two or more occasions, *after* broadcasting subchains to the
 network, from the same set of pregenerated transactions.

 If you need to broadcast pregenerated subchains separately, then you need
 the last child in the chain to be non-malleable.

 This would require all miners to start to respect it at once in order to
 avoid forking the network.

 - Sent from my phone
 Den 19 feb 2014 22:13 skrev Pieter Wuille pieter.wui...@gmail.com:

 On Wed, Feb 19, 2014 at 9:28 PM, Michael Gronager grona...@mac.com
 wrote:
  I think that we could guarantee fewer incidents by making version 1
 transactions unmalleable and then optionally introduce a version 3 that
 supported the malleability feature. That way most existing problematic
 implementations would be fixed and no doors were closed for people
 experimenting with other stuff - tx v 3 would probably then be called
 experimental transactions.

 Just to be clear: this change is not directly intended to avoid
 incidents. It will take way too long to deploy this. Software should
 deal with malleability. This is a longer-term solution intended to
 provide non-malleability guarantees for clients that a) are upgraded
 to use them  b) willing to restrict their functionality. As there are
 several intended use cases for malleable transactions (the sighash
 flags pretty directly are a way to signify what malleabilities are
 *wanted*), this is not about outlawing malleability.

 While we could right now make all these rules non-standard, and
 schedule a soft fork in a year or so to make them illegal, it would
 mean removing potential functionality that can only be re-enabled
 through a hard fork. This is significantly harder, so we should think
 about it very well in advance.

 About new transaction and block versions: this allows implementing and
 automatically scheduling a softfork without waiting for wallets to
 upgrade. The non-DER signature change was discussed for over two
 years, and implemented almost a year ago, and we still notice wallets
 that don't support it. We can't expect every wallet to be instantly
 modified (what about hardware wallets like the Trezor, for example?
 they may not just be able to be upgraded). Nor is it necessary: if
 your software only spends confirmed change, and tracks all debits
 correctly, there is no need.

 --
 Pieter


 --
 Managing the Performance of Cloud-Based Applications
 Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.