Received: from sog-mx-1.v43.ch3.sourceforge.com ([172.29.43.191] helo=mx.sourceforge.net) by sfs-ml-4.v29.ch3.sourceforge.com with esmtp (Exim 4.76) (envelope-from ) id 1WdmCN-0005OS-7O for bitcoin-development@lists.sourceforge.net; Fri, 25 Apr 2014 19:54:15 +0000 X-ACL-Warn: Received: from s3.neomailbox.net ([178.209.62.157]) by sog-mx-1.v43.ch3.sourceforge.com with esmtps (TLSv1:AES256-SHA:256) (Exim 4.76) id 1WdmCL-0000M4-CD for bitcoin-development@lists.sourceforge.net; Fri, 25 Apr 2014 19:54:15 +0000 Message-ID: <535ABD5D.7070509@jrn.me.uk> Date: Fri, 25 Apr 2014 20:54:05 +0100 From: J Ross Nicoll User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 MIME-Version: 1.0 To: gavinandresen@gmail.com Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Spam-Score: 0.0 (/) X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. X-Headers-End: 1WdmCL-0000M4-CD Cc: bitcoin-development@lists.sourceforge.net Subject: [Bitcoin-development] Error handling in payment protocol (BIP-0070 and BIP-0072) 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: Fri, 25 Apr 2014 19:54:15 -0000 Dear Gavin, all, Going over the payment protocol specifications, I've noticed that there's appears to be a lack of specificity on handling of error states. In most cases there are reasonably obvious solutions, however it would seem positive to formalise processes to ensure consistency. I'm wondering therefore if either you'd be willing to edit the existing BIP, or advise on whether this is useful to write up as a new BIP? The main area of concern is handling unexpected problems while sending the Payment message, or receiving the corresponding PaymentACK message. For example, in case of a transport layer failure or non-200 HTTP status code while sending the Payment message, what should the wallet software do next? Is it safe to re-send the Payment message? I'd propose that for any transport failure or 500 status code, the client retries after a delay (suggested at 30-60 seconds). For 400 status codes, the request should not be repeated, and as such the user should be alerted and a copy of the Payment message saved to be resent later. For 300 (redirect and similar) status codes, is it considered safe to follow redirects? I think we have to, but good to make it clear in the specification. On the merchant's side; I think it would be useful for there to be guidance for handling of errors processing Payment messages. I'd suggest that Payment messages should have a fixed maximum size to avoid merchant systems theoretically having to accept files of any size; 10MB would seem far larger than in any way practical, and therefore a good maximum size? A defined maximum time to wait (to avoid DDoS via connection holding) might be useful too, although I'd need to do measurements to find what values are tolerable. I would like to have the protocol state that merchant systems should handle repeatedly receiving the same Payment message, and return an equivalent (if not identical) PaymentACK to each. This is important in case of a network failure while the client is sending the Payment message, as outlined above. Lastly, I'm wondering about potential timing issues with transactions; if a merchant system wants to see confirmation of a transaction before sending a PaymentACK, any thoughts on whether it should hold the connection, or send a PaymentACK with a memo indicating payment has been seen on the relay network but is not yet confirmed, or something else? Happy to write this up as a new BIP if that's more appropriate than editing the original, and please do tell me if I've missed anything obvious/prior discussion on this topic. Ross