<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <updated></updated>
  <generator>https://nostr.ae</generator>

  <title>Nostr notes by </title>
  <author>
    <name></name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://nostr.ae/npub1uwweecasakwtk96j3vjmkjenhnhyv4rku382txq0kmexjwuh4w2st55zf7.rss" />
  <link href="https://nostr.ae/npub1uwweecasakwtk96j3vjmkjenhnhyv4rku382txq0kmexjwuh4w2st55zf7" />
  <id>https://nostr.ae/npub1uwweecasakwtk96j3vjmkjenhnhyv4rku382txq0kmexjwuh4w2st55zf7</id>
  <icon></icon>
  <logo></logo>




  <entry>
    <id>https://nostr.ae/nevent1qqsxtrx2syg7xcdm5c8tle47qcrqfpyeqdw506f4kzd95yxp6hpe3wqzyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2f2jvce</id>
    
      <title type="html">📅 Original date posted:2018-03-14 📝 Original message:Thank ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsxtrx2syg7xcdm5c8tle47qcrqfpyeqdw506f4kzd95yxp6hpe3wqzyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2f2jvce" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswt50k7j6p2ycs8szrxyfcru6xdjrzd45p0cggp8ec9aew5tv7rlsnjx6jn&#39;&gt;nevent1q…x6jn&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2018-03-14&lt;br/&gt;📝 Original message:Thank you.&lt;br/&gt;&lt;br/&gt;I can&amp;#39;t really see from your proposal if you had thought of this: A soft&lt;br/&gt;fork can make old nodes accept invalid message signatures as valid. For&lt;br/&gt;example, a &amp;#34;signer&amp;#34; can use a witness version unknown to the verifier to&lt;br/&gt;fool the verifier. Witness version is detectable (just reject unknown&lt;br/&gt;witness versions)  but there may be more subtle changes. Segwit was not&lt;br/&gt;&amp;#34;detectable&amp;#34; in that way, for example.&lt;br/&gt;&lt;br/&gt;This is the reason why I withdrew BIP120. If you have thought about the&lt;br/&gt;above, I&amp;#39;d be very interested.&lt;br/&gt;&lt;br/&gt;/Kalle&lt;br/&gt;&lt;br/&gt;Sent from my Sinclair ZX81&lt;br/&gt;&lt;br/&gt;Den 14 mars 2018 16:10 skrev &amp;#34;Karl Johan Alm via bitcoin-dev&amp;#34; &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt;:&lt;br/&gt;&lt;br/&gt;Hello,&lt;br/&gt;&lt;br/&gt;I am considering writing a replacement for the message signing tools&lt;br/&gt;that are currently broken for all but the legacy 1xx addresses. The&lt;br/&gt;approach (suggested by Pieter Wuille) is to do a script based&lt;br/&gt;approach. This does not seem to require a lot of effort for&lt;br/&gt;implementing in Bitcoin Core*. Below is my proposal for this system:&lt;br/&gt;&lt;br/&gt;A new structure SignatureProof is added, which is a simple scriptSig &amp;amp;&lt;br/&gt;witnessProgram container that can be serialized. This is passed out&lt;br/&gt;from/into the signer/verifier.&lt;br/&gt;&lt;br/&gt;RPC commands:&lt;br/&gt;&lt;br/&gt;sign &amp;lt;address&amp;gt; &amp;lt;message&amp;gt; [&amp;lt;prehashed&amp;gt;=false]&lt;br/&gt;&lt;br/&gt;Generates a signature proof for &amp;lt;message&amp;gt; using the same method that&lt;br/&gt;would be used to spend coins sent to &amp;lt;address&amp;gt;.**&lt;br/&gt;&lt;br/&gt;verify &amp;lt;address&amp;gt; &amp;lt;message&amp;gt; &amp;lt;proof&amp;gt; [&amp;lt;prehashed&amp;gt;=false]&lt;br/&gt;&lt;br/&gt;Deserializes and executes the proof using a custom signature checker&lt;br/&gt;whose sighash is derived from &amp;lt;message&amp;gt;. Returns true if the check&lt;br/&gt;succeeds, and false otherwise. The scriptPubKey is derived directly&lt;br/&gt;from &amp;lt;address&amp;gt;.**&lt;br/&gt;&lt;br/&gt;Feedback welcome.&lt;br/&gt;&lt;br/&gt;-Kalle.&lt;br/&gt;&lt;br/&gt;(*) Looks like you can simply use VerifyScript with a new signature&lt;br/&gt;checker class. (h/t Nicolas Dorier)&lt;br/&gt;(**) If &amp;lt;prehashed&amp;gt; is true, &amp;lt;message&amp;gt; is the sighash, otherwise&lt;br/&gt;sighash=sha256d(message).&lt;br/&gt;_______________________________________________&lt;br/&gt;bitcoin-dev mailing list&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180314/a857358a/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20180314/a857358a/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:11:12Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsy4ypl47g87y90jzeg0uh3xr87c9mdhadw2aaue4ppx3v36uv3leszyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2zdjkj8</id>
    
      <title type="html">📅 Original date posted:2017-12-18 📝 Original message:Thanks ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsy4ypl47g87y90jzeg0uh3xr87c9mdhadw2aaue4ppx3v36uv3leszyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2zdjkj8" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqst99nn08hzwgaggss9tzeff5m2zdpxwc5euzqsa8yd7pka2drqucc539pm5&#39;&gt;nevent1q…9pm5&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-12-18&lt;br/&gt;📝 Original message:Thanks Eric.&lt;br/&gt;&lt;br/&gt;It would be a pity if early witnesses got lost due to nodes abandoning them&lt;br/&gt;by running witnessless. But as long as there&amp;#39;s at least one accessible&lt;br/&gt;source for them left we&amp;#39;re OKish. Let&amp;#39;s hope we don&amp;#39;t get to that point in&lt;br/&gt;the near future. As long as Bitcoin Core doesn&amp;#39;t implement witnessless&lt;br/&gt;mode, there&amp;#39;s little risk.&lt;br/&gt;&lt;br/&gt;What do people here think about the benefits and risks with running&lt;br/&gt;witnessless?&lt;br/&gt;&lt;br/&gt;/Kalle&lt;br/&gt;&lt;br/&gt;Sent from my Sinclair ZX81&lt;br/&gt;&lt;br/&gt;Den 18 dec. 2017 17:19 skrev &amp;#34;Eric Voskuil&amp;#34; &amp;lt;eric at voskuil.org&amp;gt;:&lt;br/&gt;&lt;br/&gt;&amp;gt; You can&amp;#39;t know (assume) a block is valid unless you have previously&lt;br/&gt;&amp;gt; validated the block yourself. But in the case where you have, and then&lt;br/&gt;&amp;gt; intend to rely on it in a future sync, there is no need for witness data&lt;br/&gt;&amp;gt; for blocks you are not going to validate. So you can just not request it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However you will not be able to provide those blocks to nodes that *are*&lt;br/&gt;&amp;gt; validating; the client is pruned and therefore not a peer (cannot&lt;br/&gt;&amp;gt; reciprocate). (An SPV client is similarly not a peer; it is a more deeply&lt;br/&gt;&amp;gt; pruned client than the witnessless client.)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There is no other reason that a node requires witness data. SPV clients&lt;br/&gt;&amp;gt; don&amp;#39;t need it as it is neither require it to verify header commitment to&lt;br/&gt;&amp;gt; transactions nor to extract payment addresses from them.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The harm to the network by pruning is that eventually it can become harder&lt;br/&gt;&amp;gt; and even impossible for anyone to validate the chain. But because you are&lt;br/&gt;&amp;gt; fully validating you individually remain secure, so there is no individual&lt;br/&gt;&amp;gt; incentive working against this system harm.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; e&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Dec 18, 2017, at 08:35, Kalle Rosenbaum &amp;lt;kalle at rosenbaum.se&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2017-12-18 13:43 GMT&#43;01:00 Eric Voskuil &amp;lt;eric at voskuil.org&amp;gt;:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; On Dec 18, 2017, at 03:32, Kalle Rosenbaum via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Dear list,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I find it hard to understand why a full node that does initial block&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; download also must download witnesses if they are going to skip&lt;br/&gt;&amp;gt;&amp;gt; verification anyway.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Why run a full node if you are not going to verify the chain?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I meant to say &amp;#34;I find it hard to understand why a full node that does&lt;br/&gt;&amp;gt; initial block&lt;br/&gt;&amp;gt; download also must download witnesses when it is going to skip&lt;br/&gt;&amp;gt; verification of the witnesses anyway.&amp;#34;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m referring to the &amp;#34;assumevalid&amp;#34; feature of Bitcoin Core that skips&lt;br/&gt;&amp;gt; signature verification up to block X. Or have I misunderstood assumevalid?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; /Kalle&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; If my full node skips signature verification for&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; blocks earlier than X, it seems the reasons for downloading the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; witnesses for those blocks are:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; * to be able to send witnesses to other nodes.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; * to verify the witness root hash of the blocks&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I suppose that it&amp;#39;s important to verify the witness root hash because&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; a bad peer may send me invalid witnesses during initial block&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; download, and if I don&amp;#39;t verify that the witness root hash actually&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; commits to them, I will get banned by peers requesting the blocks from&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; me because I send them garbage.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; So both the reasons above (there may be more that I don&amp;#39;t know about)&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; are actually the same reason: To be able to send witnesses to others&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; without getting banned.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; What if a node could chose not to download witnesses and thus chose to&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; send only witnessless blocks to peers. Let&amp;#39;s call these nodes&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; witnessless nodes. Note that witnessless nodes are only witnessless&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; for blocks up to X. Everything after X is fully verified.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Witnessless nodes would be able to sync faster because it needs to&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; download less data to calculate their UTXO set. They would therefore&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; more quickly be able to provide full service to SPV wallets and its&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; local wallets as well as serving blocks to other witnessless nodes&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; with same or higher assumevalid block. For witnessless nodes with&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; lower assumevalid they can serve at least some blocks. It could also&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; serve blocks to non-segwit nodes.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Do witnessless nodes risk dividing the network in two parts, one&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; witnessless and one with full nodes, with few connections between the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; parts?&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; So basically, what are the reasons not to implement witnessless&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; nodes?&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Thank you,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; /Kalle&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20171218/23ed9807/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20171218/23ed9807/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:08:49Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs0h3xyw5gzpmsz5jjdv60yf7gm6pztx3wu74sa3h9fd3pzzuzlz8czyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e26h896q</id>
    
      <title type="html">📅 Original date posted:2017-12-18 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs0h3xyw5gzpmsz5jjdv60yf7gm6pztx3wu74sa3h9fd3pzzuzlz8czyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e26h896q" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9hm0e6fkp8qeszlevnweahphkpld7mcz9rmxyh7rxspqdtptztuse9tpn0&#39;&gt;nevent1q…tpn0&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2017-12-18&lt;br/&gt;📝 Original message:Hi Mark&lt;br/&gt;&lt;br/&gt;Yes, it seems like sign-to-contract protocols, which I just now briefly&lt;br/&gt;read about [1][2], may need to use historic witnesses. That raises the&lt;br/&gt;question, what are Bitcoin witnesses for?&lt;br/&gt;&lt;br/&gt;To me it seems witnesses should be regarded as temporary. But it seems both&lt;br/&gt;respondents to this thread, Eric and Mark, mean that witnesses are forever.&lt;br/&gt;I regard witnesses as a way to authenticate updates to the UTXO set, and&lt;br/&gt;once buried deep enough in the blockchain, the witness is no longer needed,&lt;br/&gt;because consensus has formed around the UTXO set update.&lt;br/&gt;&lt;br/&gt;Suppose a transaction with an invalid witness happens to enter the&lt;br/&gt;blockchain and gets buried 100000 blocks down with the witness still&lt;br/&gt;available. Is the blockchain above it valid? I&amp;#39;d say the blockchain is&lt;br/&gt;valid and that it was a bug that the transaction made it into the&lt;br/&gt;blockchain. We will have to live with such bugs.&lt;br/&gt;&lt;br/&gt;Another way to put it: Suppose that all witnesses from 2017 dissappears&lt;br/&gt;from all nodes in 2020. Is the blockchain still valid? I think so. I would&lt;br/&gt;continue using it without looking back.&lt;br/&gt;&lt;br/&gt;With that approach, I think sign-to-contract protocols has to find ways to&lt;br/&gt;work in a witnessless environment. For example, users of such protocols can&lt;br/&gt;setup their own archival nodes.&lt;br/&gt;&lt;br/&gt;I&amp;#39;d love to hear alternative views on this.&lt;br/&gt;&lt;br/&gt;Thanks,&lt;br/&gt;/Kalle&lt;br/&gt;&lt;br/&gt;[1]&lt;br/&gt;&lt;a href=&#34;https://download.wpsoftware.net/bitcoin/wizardry/mw-slides/2017-03-mit-bitcoin-expo/slides.pdf&#34;&gt;https://download.wpsoftware.net/bitcoin/wizardry/mw-slides/2017-03-mit-bitcoin-expo/slides.pdf&lt;/a&gt;&lt;br/&gt;[2] &lt;a href=&#34;https://bitcointalk.org/index.php?topic=893898.msg9861102#msg9861102&#34;&gt;https://bitcointalk.org/index.php?topic=893898.msg9861102#msg9861102&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;2017-12-18 18:30 GMT&#43;01:00 Mark Friedenbach via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt;:&lt;br/&gt;&lt;br/&gt;&amp;gt; Sign-to-contract enables some interesting protocols, none of which are in&lt;br/&gt;&amp;gt; wide use as far as I’m aware. But if they were (and arguably this is an&lt;br/&gt;&amp;gt; area that should be more developed), then SPV nodes validating these&lt;br/&gt;&amp;gt; protocols will need access to witness data. If a node is performing IBD&lt;br/&gt;&amp;gt; with assumevalid set to true, and is also intending to prune history, then&lt;br/&gt;&amp;gt; there’s no reason to fetch those witnesses as far as I’m aware. But it&lt;br/&gt;&amp;gt; would be a great disservice to the network for nodes intending to serve SPV&lt;br/&gt;&amp;gt; clients to prune this portion of the block history.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Dec 18, 2017, at 8:19 AM, Eric Voskuil via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; You can&amp;#39;t know (assume) a block is valid unless you have previously&lt;br/&gt;&amp;gt; validated the block yourself. But in the case where you have, and then&lt;br/&gt;&amp;gt; intend to rely on it in a future sync, there is no need for witness data&lt;br/&gt;&amp;gt; for blocks you are not going to validate. So you can just not request it.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However you will not be able to provide those blocks to nodes that *are*&lt;br/&gt;&amp;gt; validating; the client is pruned and therefore not a peer (cannot&lt;br/&gt;&amp;gt; reciprocate). (An SPV client is similarly not a peer; it is a more deeply&lt;br/&gt;&amp;gt; pruned client than the witnessless client.)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There is no other reason that a node requires witness data. SPV clients&lt;br/&gt;&amp;gt; don&amp;#39;t need it as it is neither require it to verify header commitment to&lt;br/&gt;&amp;gt; transactions nor to extract payment addresses from them.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The harm to the network by pruning is that eventually it can become harder&lt;br/&gt;&amp;gt; and even impossible for anyone to validate the chain. But because you are&lt;br/&gt;&amp;gt; fully validating you individually remain secure, so there is no individual&lt;br/&gt;&amp;gt; incentive working against this system harm.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; e&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Dec 18, 2017, at 08:35, Kalle Rosenbaum &amp;lt;kalle at rosenbaum.se&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2017-12-18 13:43 GMT&#43;01:00 Eric Voskuil &amp;lt;eric at voskuil.org&amp;gt;:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; On Dec 18, 2017, at 03:32, Kalle Rosenbaum via bitcoin-dev &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Dear list,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I find it hard to understand why a full node that does initial block&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; download also must download witnesses if they are going to skip&lt;br/&gt;&amp;gt;&amp;gt; verification anyway.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Why run a full node if you are not going to verify the chain?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I meant to say &amp;#34;I find it hard to understand why a full node that does&lt;br/&gt;&amp;gt; initial block&lt;br/&gt;&amp;gt; download also must download witnesses when it is going to skip&lt;br/&gt;&amp;gt; verification of the witnesses anyway.&amp;#34;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m referring to the &amp;#34;assumevalid&amp;#34; feature of Bitcoin Core that skips&lt;br/&gt;&amp;gt; signature verification up to block X. Or have I misunderstood assumevalid?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; /Kalle&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; If my full node skips signature verification for&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; blocks earlier than X, it seems the reasons for downloading the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; witnesses for those blocks are:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; * to be able to send witnesses to other nodes.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; * to verify the witness root hash of the blocks&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I suppose that it&amp;#39;s important to verify the witness root hash because&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; a bad peer may send me invalid witnesses during initial block&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; download, and if I don&amp;#39;t verify that the witness root hash actually&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; commits to them, I will get banned by peers requesting the blocks from&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; me because I send them garbage.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; So both the reasons above (there may be more that I don&amp;#39;t know about)&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; are actually the same reason: To be able to send witnesses to others&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; without getting banned.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; What if a node could chose not to download witnesses and thus chose to&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; send only witnessless blocks to peers. Let&amp;#39;s call these nodes&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; witnessless nodes. Note that witnessless nodes are only witnessless&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; for blocks up to X. Everything after X is fully verified.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Witnessless nodes would be able to sync faster because it needs to&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; download less data to calculate their UTXO set. They would therefore&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; more quickly be able to provide full service to SPV wallets and its&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; local wallets as well as serving blocks to other witnessless nodes&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; with same or higher assumevalid block. For witnessless nodes with&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; lower assumevalid they can serve at least some blocks. It could also&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; serve blocks to non-segwit nodes.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Do witnessless nodes risk dividing the network in two parts, one&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; witnessless and one with full nodes, with few connections between the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; parts?&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; So basically, what are the reasons not to implement witnessless&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; nodes?&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Thank you,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; /Kalle&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20171218/966989da/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20171218/966989da/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T18:08:48Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsf7mjr2jt2y0xff64ly4z7yx8kru84n8lyv3gt4r3qacpa69j8kcgzyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2htcxsh</id>
    
      <title type="html">📅 Original date posted:2015-07-27 📝 Original message:Ok, ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsf7mjr2jt2y0xff64ly4z7yx8kru84n8lyv3gt4r3qacpa69j8kcgzyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2htcxsh" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqspelg54nnf23ru69uafd8dqey8wk02ykfvtmjf6n54g8y6y02sgmqlhzw6z&#39;&gt;nevent1q…zw6z&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-07-27&lt;br/&gt;📝 Original message:Ok, Thanks&lt;br/&gt;Den 27 jul 2015 11:08 skrev &amp;#34;Jorge Timón&amp;#34; &amp;lt;jtimon at jtimon.cc&amp;gt;:&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Jul 26, 2015 11:13 PM, &amp;#34;Kalle Rosenbaum&amp;#34; &amp;lt;kalle at rosenbaum.se&amp;gt; wrote:&lt;br/&gt;&amp;gt; &amp;gt; Do you think we need a bigger nonce? In that case, why?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I don&amp;#39;t know, it wasn&amp;#39;t me that proposed a bigger nonce. I just wanted to&lt;br/&gt;&amp;gt; point out that the policy limit shouldn&amp;#39;t be a concern.&lt;br/&gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150727/3c7c4f1c/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150727/3c7c4f1c/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T15:43:38Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsv588nfhpe3l4spfgn06aqeyxcagk44ackz65j48ez3fw3nje7rpczyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2j0sm7e</id>
    
      <title type="html">📅 Original date posted:2015-07-26 📝 Original ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsv588nfhpe3l4spfgn06aqeyxcagk44ackz65j48ez3fw3nje7rpczyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2j0sm7e" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsd2g8syfaeevlal8kpwr69h4a6efkktjtxa456c68urvt8wr8078ggfcj3p&#39;&gt;nevent1q…cj3p&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-07-26&lt;br/&gt;📝 Original message:(Resending to the new bitcoin-dev list after sending to the old list)&lt;br/&gt;&lt;br/&gt;2015-07-25 21:34 GMT&#43;02:00 Jorge Timón &amp;lt;jtimon at jtimon.cc&amp;gt;:&lt;br/&gt;&amp;gt; Then why do you assume they have a policy limit that not even bitcoin core&lt;br/&gt;&amp;gt; itself maintains (the default limit was moved from 42 to 83 [counting the&lt;br/&gt;&amp;gt; op_return and pushes])?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The policy check is not a consensus rule. Other implementations may have&lt;br/&gt;&amp;gt; another default or not have a limit at all.&lt;br/&gt;&lt;br/&gt;Thank you for pointing this out.&lt;br/&gt;&lt;br/&gt;That&amp;#39;s right. Bitcoin core now support 80 bytes data by default. And&lt;br/&gt;yes, I was wrong in assuming 40 bytes policy in all implementations,&lt;br/&gt;even if 40 bytes was the limit in bitcoin core at the time of writing&lt;br/&gt;the BIP.&lt;br/&gt;&lt;br/&gt;If there&amp;#39;s a need to increase the size of the nonce, for example to&lt;br/&gt;128 bits instead of the 48 bits as designed in BIP 120, then we can of&lt;br/&gt;course do that, either now or in a subsequent version of PoP.&lt;br/&gt;&lt;br/&gt;As noted before though, a longer nonce also means bigger QR codes&lt;br/&gt;generated from the BIP 121 URIs. So I think that 48 bits is a good&lt;br/&gt;tradeoff right now. And as stated in BIP120, a server generating PoP&lt;br/&gt;requests should try to detect brute force attacks, or at least delay&lt;br/&gt;the response (containing the nonce) by some 100 ms or so.&lt;br/&gt;&lt;br/&gt;Do you think we need a bigger nonce? In that case, why?&lt;br/&gt;&lt;br/&gt;If PoP later becomes an extension of BIP70, then there is no such size&lt;br/&gt;constraint on the nonce, since it will be part of some kind of (e.g.)&lt;br/&gt;PopRequest message and not contained in a QR encoded URI.&lt;br/&gt;&lt;br/&gt;/Kalle
    </content>
    <updated>2023-06-07T15:43:37Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqszclmhne83sxp6w0g34r352f2325wn0eem55s00q9zj9e88pfwwrczyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2h0terw</id>
    
      <title type="html">📅 Original date posted:2015-07-24 📝 Original message:These ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqszclmhne83sxp6w0g34r352f2325wn0eem55s00q9zj9e88pfwwrczyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2h0terw" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsvvx9xpen0w65grevd6sk0r4q74tfs78d7enz3cjefcezud4jp20cl6hx7p&#39;&gt;nevent1q…hx7p&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-07-24&lt;br/&gt;📝 Original message:These BIPs have been assigned 120 and 121:&lt;br/&gt;&lt;br/&gt;120: Proof of Payment&lt;br/&gt;121: Proof of Payment URI scheme&lt;br/&gt;&lt;br/&gt;Regards,&lt;br/&gt;Kalle&lt;br/&gt;Den 24 jul 2015 08:27 skrev &amp;#34;Kalle Rosenbaum&amp;#34; &amp;lt;kalle at rosenbaum.se&amp;gt;:&lt;br/&gt;&lt;br/&gt;&amp;gt; These BIPs have been assigned 120 and 121:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 120: Proof of Payment&lt;br/&gt;&amp;gt; 121: Proof of Payment URI scheme&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt; Kalle&lt;br/&gt;&amp;gt; Den 21 jun 2015 16:39 skrev &amp;#34;Kalle Rosenbaum&amp;#34; &amp;lt;kalle at rosenbaum.se&amp;gt;:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi Greg!&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; After a lot of constructive discussion, feedback and updating, I&amp;#39;m&lt;br/&gt;&amp;gt;&amp;gt; requesting that you please assign these proposals BIP numbers. It&amp;#39;s both&lt;br/&gt;&amp;gt;&amp;gt; the &amp;#34;Proof of Payment&amp;#34; proposal and the &amp;#34;Proof of Payment URI scheme&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt; proposal that I&amp;#39;m referring to.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The wikimedia source is available here:&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/kallerosenbaum/poppoc/wiki/Proof-of-Payment-BIP&#34;&gt;https://github.com/kallerosenbaum/poppoc/wiki/Proof-of-Payment-BIP&lt;/a&gt; and&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/kallerosenbaum/poppoc/wiki/btcpop-scheme-BIP&#34;&gt;https://github.com/kallerosenbaum/poppoc/wiki/btcpop-scheme-BIP&lt;/a&gt;.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Is this what you need in order to proceed or is there something else you&lt;br/&gt;&amp;gt;&amp;gt; need from me?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Best regards,&lt;br/&gt;&amp;gt;&amp;gt; /Kalle&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 2015-06-17 11:51 GMT&#43;02:00 Kalle Rosenbaum &amp;lt;kalle at rosenbaum.se&amp;gt;:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 2015-06-16 21:48 GMT&#43;02:00 Pieter Wuille &amp;lt;pieter.wuille at gmail.com&amp;gt;:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; I don&amp;#39;t see why existing software could create a 40-byte OP_RETURN but&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; larger? The limitation comes from a relay policy in full nodes, not a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; limitation is wallet software... and PoPs are not relayed on the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; network.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; You are probably right here. The thing is that I don&amp;#39;t know how *all*&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; wallet signing and validating software is written, so I figure it&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; better to stick to a &amp;#34;valid&amp;#34; output. Since I don&amp;#39;t *need* more data&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; than 40 bytes, why bother. There&amp;#39;s another constraint to this as well:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The other BIP proposal, &amp;#34;Proof of Payment URI scheme&amp;#34;, includes a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; nonce parameter in the URI. If the nonce is very long, the QR code&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; will be unnecessarily big. The server should try to detect a brute&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; force of the 48 bit nonce, or at least delay the pop requests by some&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 100 ms or so.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Do you think this is an actual problem, and why? Is your suggestion to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; use a bigger nonce, given the above?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; Regarding sharing, I think you&amp;#39;re talking about a different use case.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Say&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; you want to pay for 1-week valid entrance to some venue. I thought the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; purpose of the PoP was to be sure that only the person who paid for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; it, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; not anyone else can use it during that week.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; That&amp;#39;s right. That&amp;#39;s one use case. You pay for the 1-week entrance and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; then you use your wallet to sign PoPs when you enter the venue.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; My argument against that is that the original payer can also hand the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; private keys in his wallet to someone else, who would then become able&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; create PoPs for the service. He does not lose anything by this,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; assuming the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; address is not reused.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Yes, that is possible. It&amp;#39;s about the same as giving out a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; username/password for a service that you have paid for. In the case of&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; a concert ticket, it&amp;#39;s simple. Just allow one entrance per payment.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; But in the example you gave, it&amp;#39;s a bit more complicated. You could&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; for example give all guests a bracelet upon first entry or upon first&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; exit. Or you can put a stamp on people leaving the venue, and demand&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; that all re-entries show the stamp, possibly along with a new PoP.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Pretty much as is done already. Different use cases will need&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; different protection. In this example, the value added by PoP is that&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the venue does not have to distribute tickets in advance. This in turn&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; allows for better privacy for the customer, who don&amp;#39;t have to give out&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; personal information such as an email-address.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; So, using a token does not change anything, except it can be provided&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; payer - instead of relying on creating an implicit identity based on&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; who&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; seems to have held particular private keys in the past.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Yes, that&amp;#39;s a difference, but it comes at the cost of security. The&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; stolen token can be used over and over. In the case of PoP it&amp;#39;s only&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; usable once, and it&amp;#39;s only created when it&amp;#39;s actually needed,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; minimizing the window of opportunity for the thief.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Kalle&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt; On Jun 16, 2015 9:41 PM, &amp;#34;Kalle Rosenbaum&amp;#34; &amp;lt;kalle at rosenbaum.se&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; 2015-06-16 21:25 GMT&#43;02:00 Pieter Wuille &amp;lt;pieter.wuille at gmail.com&amp;gt;:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; You can&amp;#39;t avoid sharing the token, and you can&amp;#39;t avoid sharing the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; private&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; keys used for signing either. If they are single use, you don&amp;#39;t lose&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; anything by sharing them.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Forwarding the PoP request would be a way to avoid sharing keys, as&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; suggested above.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; Also you are not creating a real transaction. Why does the OP_RETURN&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; limitation matter?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; This was discussed in the beginning of this thread: &amp;#34;The idea is to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; simplify implementation. Existing software can be used as is to sign&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; and validate PoPs&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Kalle&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; On Jun 16, 2015 9:22 PM, &amp;#34;Kalle Rosenbaum&amp;#34; &amp;lt;kalle at rosenbaum.se&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; Thank you for your comments Pieter! Please find my answers below.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; 2015-06-16 16:31 GMT&#43;02:00 Pieter Wuille &amp;lt;pieter.wuille at gmail.com&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; On Mon, Jun 15, 2015 at 1:59 PM, Kalle Rosenbaum &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; kalle at rosenbaum.se&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; 2015-06-15 12:00 GMT&#43;02:00 Pieter Wuille &amp;lt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; pieter.wuille at gmail.com&amp;gt;:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; I&amp;#39;m not sure if we will be able to support PoP with CoinJoin.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Maybe&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; someone with more insight into CoinJoin have some input?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; Not really. The problem is that you assume a transaction&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; corresponds&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; single payment. This is true for simple wallet use cases, but not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; compatible&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; with CoinJoin, or with systems that for example would want to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; combine&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; multiple payments in a single transaction.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; Yes, you are right. It&amp;#39;s not compatible with CoinJoin and the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; likes.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; 48 bits seems low to me, but it does indeed solve the problem.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Why&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; 128&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; or 256 bits?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; The nonce is limited because of the OP_RETURN output being limited&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; to&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; 40 bytes of data: 2 bytes version, 32 bytes txid, 6 bytes nonce.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; Why does anyone care who paid? This is like walking into a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; coffeshop,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; noticing I don&amp;#39;t have money with me, let me friend pay for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; me, and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; then&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; have&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; the shop insist that I can&amp;#39;t drink it because I&amp;#39;m not the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; buyer.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; If you pay as you use the service (ie pay for coffee upfront),&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; there&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; no need for PoP. Please see the Motivation section. But you are&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; right&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; that you must have the wallet(s) that paid at hand when you&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; issue a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; PoP.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; Track payments, don&amp;#39;t try to assign identities to payers.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; Please elaborate, I don&amp;#39;t understand what you mean here.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; I think that is a mistake. You should not assume that the wallet&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; who&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; held&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; the coins is the payer/buyer. That&amp;#39;s what I said earlier; you&amp;#39;re&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; implicitly&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; creating an identity (the one who holds these keys) based on the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; transaction. This seems fundamentally wrong to me, and not&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; necessary.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; The&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; receiver should not care who paid or how, he should care what was&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; payed&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; for.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; You are saying that it&amp;#39;s a problem that the wallet used to pay,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; must&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; also be used to issue the PoP? That may very well be a problem in&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; some&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; cases. People using PoP should of course be aware of it&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; limitations&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; and act accordingly, i.e. don&amp;#39;t pay for concert tickets for a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; friend&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; and expect your friend to be able to enter the arena with her&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; wallet.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; As Tom Harding noted, it is possible to transfer keys to your&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; friend&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; wallet, but that might not be desirable if those keys are also used&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; for other payments. Also that would weaken the security of an HD&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; wallet, since a chain code along with a private key would reveal&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; all&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; keys in that tree. Another solution is that your friend forwards&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; PoP request to your wallet, through twitter or SMS, and you send&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; PoP for her. Maybe that forwarding mechanism can be built into&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; wallets&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; and automated so that the wallet automatically suggests to sign the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; PoP for your friend. This is probably something to investigate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; further, but not within the scope of this BIP.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; Of course the simplest solution would be to send money to your&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; friend&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; first so that she can pay for the ticket from her own wallet, but&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; that&amp;#39;s not always feasible.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; The easiest solution to this IMHO would be an extension to the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; payment&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; protocol that gives you (or your wallet) a token in return for&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; paying,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; that knowledge of that token is used to gain access to the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; services&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; you&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; provide.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; That token would then be reusable. Someone stealing it would be&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; able&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; to use it as much as she wants. That is what I want to avoid with&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; PoP.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; The BIP proposal briefly mentions something like this in the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; rationale. I also had a discussion about this with Mike Hearn on&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; this&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; list on Mars 13 that I think covers most pros and cons of the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; different approaches.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; While your suggestion does indeed separate the transaction from the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; proof of payment, it also assumes that the token is held in the&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; wallet&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; that pays. Otherwise you would need to keep it in another safe&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; place,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; remember it&amp;#39;s reusable. Where would that be? How would you transfer&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; that token to your friend?&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; Thank you again for your comments. I appreciate it.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; Best regards,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; Kalle&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; --&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; Pieter&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150724/34e83c0a/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150724/34e83c0a/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T15:43:36Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs8c73xunamafnnfaqyggx54tm97t8sawclkhnfg0gedmxmyhhnrdczyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2d05un3</id>
    
      <title type="html">📅 Original date posted:2015-06-22 📝 Original message:Thank ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs8c73xunamafnnfaqyggx54tm97t8sawclkhnfg0gedmxmyhhnrdczyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2d05un3" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsxxgzpll8t2dw702zq5u4kaulw8542ya2q8gdjmfpgl26h5cuu3wcrdd4h5&#39;&gt;nevent1q…d4h5&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-06-22&lt;br/&gt;📝 Original message:Thank you!&lt;br/&gt;&lt;br/&gt;A few questions/comments:&lt;br/&gt;&lt;br/&gt;* In the specification, you refer to &amp;#34;t_start&amp;#34;. I guess you mean &amp;#34;time_start&amp;#34;?&lt;br/&gt;&lt;br/&gt;* Miners can, especially when close to a block doubling or shortly&lt;br/&gt;after activation, to some extent manipulate max block size by&lt;br/&gt;manipulating the time stamp in the block header within valid limits.&lt;br/&gt;According to the pseudo code in the specification, the first and a&lt;br/&gt;handful of subsequent blocks after activation could actually have&lt;br/&gt;negative max block sizes due to this (depending on how you define the&lt;br/&gt;% operator of the pseudo code). I haven&amp;#39;t checked the reference&lt;br/&gt;implementation, but I do think that the specification section should&lt;br/&gt;explicitly handle this.&lt;br/&gt;&lt;br/&gt;Regards,&lt;br/&gt;Kalle&lt;br/&gt;&lt;br/&gt;2015-06-22 20:18 GMT&#43;02:00 Gavin Andresen &amp;lt;gavinandresen at gmail.com&amp;gt;:&lt;br/&gt;&amp;gt; I promised to write a BIP after I&amp;#39;d implemented&lt;br/&gt;&amp;gt; increase-the-maximum-block-size code, so here it is. It also lives at:&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/gavinandresen/bips/blob/blocksize/bip-8MB.mediawiki&#34;&gt;https://github.com/gavinandresen/bips/blob/blocksize/bip-8MB.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I don&amp;#39;t expect any proposal to please everybody; there are unavoidable&lt;br/&gt;&amp;gt; tradeoffs to increasing the maximum block size. I prioritize implementation&lt;br/&gt;&amp;gt; simplicity -- it is hard to write consensus-critical code, so simpler is&lt;br/&gt;&amp;gt; better.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;   BIP: ??&lt;br/&gt;&amp;gt;   Title: Increase Maximum Block Size&lt;br/&gt;&amp;gt;   Author: Gavin Andresen &amp;lt;gavinandresen at gmail.com&amp;gt;&lt;br/&gt;&amp;gt;   Status: Draft&lt;br/&gt;&amp;gt;   Type: Standards Track&lt;br/&gt;&amp;gt;   Created: 2015-06-22&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ==Abstract==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This BIP proposes replacing the fixed one megabyte maximum block size with a&lt;br/&gt;&amp;gt; maximum size that grows over time at a predictable rate.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ==Motivation==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Transaction volume on the Bitcoin network has been growing, and will soon&lt;br/&gt;&amp;gt; reach the one-megabyte-every-ten-minutes limit imposed by the one megabyte&lt;br/&gt;&amp;gt; maximum block size. Increasing the maximum size reduces the impact of that&lt;br/&gt;&amp;gt; limit on Bitcoin adoption and growth.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ==Specification==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; After deployment on the network (see the Deployment section for details),&lt;br/&gt;&amp;gt; the maximum allowed size of a block on the main network shall be calculated&lt;br/&gt;&amp;gt; based on the timestamp in the block header.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The maximum size shall be 8,000,000 bytes at a timestamp of 2016-01-11&lt;br/&gt;&amp;gt; 00:00:00 UTC (timestamp 1452470400), and shall double every 63,072,000&lt;br/&gt;&amp;gt; seconds (two years, ignoring leap years), until 2036-01-06 00:00:00 UTC&lt;br/&gt;&amp;gt; (timestamp 2083190400). The maximum size of blocks in between doublings will&lt;br/&gt;&amp;gt; increase linearly based on the block&amp;#39;s timestamp. The maximum size of blocks&lt;br/&gt;&amp;gt; after 2036-01-06 00:00:00 UTC shall be 8,192,000,000 bytes.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Expressed in pseudo-code, using integer math:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     function max_block_size(block_timestamp):&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;         time_start = 1452470400&lt;br/&gt;&amp;gt;         time_double = 60*60*24*365*2&lt;br/&gt;&amp;gt;         size_start = 8000000&lt;br/&gt;&amp;gt;         if block_timestamp &amp;gt;= time_start&#43;time_double*10&lt;br/&gt;&amp;gt;             return size_start * 2^10&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;         // Piecewise-linear-between-doublings growth:&lt;br/&gt;&amp;gt;         time_delta = block_timestamp - t_start&lt;br/&gt;&amp;gt;         doublings = time_delta / time_double&lt;br/&gt;&amp;gt;         remainder = time_delta % time_double&lt;br/&gt;&amp;gt;         interpolate = (size_start * 2^doublings * remainder) / time_double&lt;br/&gt;&amp;gt;         max_size = size_start * 2^doublings &#43; interpolate&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;         return max_size&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ==Deployment==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Deployment shall be controlled by hash-power supermajority vote (similar to&lt;br/&gt;&amp;gt; the technique used in BIP34), but the earliest possible activation time is&lt;br/&gt;&amp;gt; 2016-01-11 00:00:00 UTC.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Activation is achieved when 750 of 1,000 consecutive blocks in the best&lt;br/&gt;&amp;gt; chain have a version number with bits 3 and 14 set (0x20000004 in hex). The&lt;br/&gt;&amp;gt; activation time will be the timestamp of the 750&amp;#39;th block plus a two week&lt;br/&gt;&amp;gt; (1,209,600 second) grace period to give any remaining miners or services&lt;br/&gt;&amp;gt; time to upgrade to support larger blocks. If a supermajority is achieved&lt;br/&gt;&amp;gt; more than two weeks before 2016-01-11 00:00:00 UTC, the activation time will&lt;br/&gt;&amp;gt; be 2016-01-11 00:00:00 UTC.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Block version numbers are used only for activation; once activation is&lt;br/&gt;&amp;gt; achieved, the maximum block size shall be as described in the specification&lt;br/&gt;&amp;gt; section, regardless of the version number of the block.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ==Rationale==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The initial size of 8,000,000 bytes was chosen after testing the current&lt;br/&gt;&amp;gt; reference implementation code with larger block sizes and receiving feedback&lt;br/&gt;&amp;gt; from miners stuck behind bandwidth-constrained networks (in particular,&lt;br/&gt;&amp;gt; Chinese miners behind the Great Firewall of China).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The doubling interval was chosen based on long-term growth trends for CPU&lt;br/&gt;&amp;gt; power, storage, and Internet bandwidth. The 20-year limit was chosen because&lt;br/&gt;&amp;gt; exponential growth cannot continue forever.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Calculations are based on timestamps and not blockchain height because a&lt;br/&gt;&amp;gt; timestamp is part of every block&amp;#39;s header. This allows implementations to&lt;br/&gt;&amp;gt; know a block&amp;#39;s maximum size after they have downloaded it&amp;#39;s header, but&lt;br/&gt;&amp;gt; before downloading any transactions.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The deployment plan is taken from Jeff Garzik&amp;#39;s proposed BIP100 block size&lt;br/&gt;&amp;gt; increase, and is designed to give miners, merchants, and&lt;br/&gt;&amp;gt; full-node-running-end-users sufficient time to upgrade to software that&lt;br/&gt;&amp;gt; supports bigger blocks. A 75% supermajority was chosen so that one large&lt;br/&gt;&amp;gt; mining pool does not have effective veto power over a blocksize increase.&lt;br/&gt;&amp;gt; The version number scheme is designed to be compatible with Pieter&amp;#39;s&lt;br/&gt;&amp;gt; Wuille&amp;#39;s proposed &amp;#34;Version bits&amp;#34; BIP.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; TODO: summarize objections/arguments from&lt;br/&gt;&amp;gt; &lt;a href=&#34;http://gavinandresen.ninja/time-to-roll-out-bigger-blocks&#34;&gt;http://gavinandresen.ninja/time-to-roll-out-bigger-blocks&lt;/a&gt;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; TODO: describe other proposals and their advantages/disadvantages over this&lt;br/&gt;&amp;gt; proposal.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ==Compatibility==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is a hard-forking change to the Bitcoin protocol; anybody running code&lt;br/&gt;&amp;gt; that fully validates blocks must upgrade before the activation time or they&lt;br/&gt;&amp;gt; will risk rejecting a chain containing larger-than-one-megabyte blocks.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Simplified Payment Verification software is not affected, unless it makes&lt;br/&gt;&amp;gt; assumptions about the maximum depth of a transaction&amp;#39;s merkle branch based&lt;br/&gt;&amp;gt; on the minimum size of a transaction and the maximum block size.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ==Implementation==&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://github.com/gavinandresen/bitcoinxt/tree/blocksize_fork&#34;&gt;https://github.com/gavinandresen/bitcoinxt/tree/blocksize_fork&lt;/a&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; bitcoin-dev mailing list&lt;br/&gt;&amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;
    </content>
    <updated>2023-06-07T15:39:43Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsrsf7hv78xtlueqlaukm9ry4gwcx25q8pk4yaezzsywlh43adkjtczyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2my9awe</id>
    
      <title type="html">📅 Original date posted:2015-06-16 📝 Original message:Thank ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsrsf7hv78xtlueqlaukm9ry4gwcx25q8pk4yaezzsywlh43adkjtczyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2my9awe" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs9g07j9dnwxdcp550mjyzg47n2uw5dfynxtpk3wqqye50pk77p27q70sux6&#39;&gt;nevent1q…sux6&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-06-16&lt;br/&gt;📝 Original message:Thank you for your comments Pieter! Please find my answers below.&lt;br/&gt;&lt;br/&gt;2015-06-16 16:31 GMT&#43;02:00 Pieter Wuille &amp;lt;pieter.wuille at gmail.com&amp;gt;:&lt;br/&gt;&amp;gt; On Mon, Jun 15, 2015 at 1:59 PM, Kalle Rosenbaum &amp;lt;kalle at rosenbaum.se&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 2015-06-15 12:00 GMT&#43;02:00 Pieter Wuille &amp;lt;pieter.wuille at gmail.com&amp;gt;:&lt;br/&gt;&amp;gt;&amp;gt; I&amp;#39;m not sure if we will be able to support PoP with CoinJoin. Maybe&lt;br/&gt;&amp;gt;&amp;gt; someone with more insight into CoinJoin have some input?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Not really. The problem is that you assume a transaction corresponds to a&lt;br/&gt;&amp;gt; single payment. This is true for simple wallet use cases, but not compatible&lt;br/&gt;&amp;gt; with CoinJoin, or with systems that for example would want to combine&lt;br/&gt;&amp;gt; multiple payments in a single transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Yes, you are right. It&amp;#39;s not compatible with CoinJoin and the likes.&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 48 bits seems low to me, but it does indeed solve the problem. Why not 128&lt;br/&gt;&amp;gt; or 256 bits?&lt;br/&gt;&lt;br/&gt;The nonce is limited because of the OP_RETURN output being limited to&lt;br/&gt;40 bytes of data: 2 bytes version, 32 bytes txid, 6 bytes nonce.&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Why does anyone care who paid? This is like walking into a coffeshop,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; noticing I don&amp;#39;t have money with me, let me friend pay for me, and then&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; have&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; the shop insist that I can&amp;#39;t drink it because I&amp;#39;m not the buyer.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If you pay as you use the service (ie pay for coffee upfront), there&amp;#39;s&lt;br/&gt;&amp;gt;&amp;gt; no need for PoP. Please see the Motivation section. But you are right&lt;br/&gt;&amp;gt;&amp;gt; that you must have the wallet(s) that paid at hand when you issue a&lt;br/&gt;&amp;gt;&amp;gt; PoP.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Track payments, don&amp;#39;t try to assign identities to payers.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Please elaborate, I don&amp;#39;t understand what you mean here.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think that is a mistake. You should not assume that the wallet who held&lt;br/&gt;&amp;gt; the coins is the payer/buyer. That&amp;#39;s what I said earlier; you&amp;#39;re implicitly&lt;br/&gt;&amp;gt; creating an identity (the one who holds these keys) based on the&lt;br/&gt;&amp;gt; transaction. This seems fundamentally wrong to me, and not necessary. The&lt;br/&gt;&amp;gt; receiver should not care who paid or how, he should care what was payed for.&lt;br/&gt;&lt;br/&gt;You are saying that it&amp;#39;s a problem that the wallet used to pay, must&lt;br/&gt;also be used to issue the PoP? That may very well be a problem in some&lt;br/&gt;cases. People using PoP should of course be aware of it&amp;#39;s limitations&lt;br/&gt;and act accordingly, i.e. don&amp;#39;t pay for concert tickets for a friend&lt;br/&gt;and expect your friend to be able to enter the arena with her wallet.&lt;br/&gt;As Tom Harding noted, it is possible to transfer keys to your friend&amp;#39;s&lt;br/&gt;wallet, but that might not be desirable if those keys are also used&lt;br/&gt;for other payments. Also that would weaken the security of an HD&lt;br/&gt;wallet, since a chain code along with a private key would reveal all&lt;br/&gt;keys in that tree. Another solution is that your friend forwards the&lt;br/&gt;PoP request to your wallet, through twitter or SMS, and you send the&lt;br/&gt;PoP for her. Maybe that forwarding mechanism can be built into wallets&lt;br/&gt;and automated so that the wallet automatically suggests to sign the&lt;br/&gt;PoP for your friend. This is probably something to investigate&lt;br/&gt;further, but not within the scope of this BIP.&lt;br/&gt;&lt;br/&gt;Of course the simplest solution would be to send money to your friend&lt;br/&gt;first so that she can pay for the ticket from her own wallet, but&lt;br/&gt;that&amp;#39;s not always feasible.&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The easiest solution to this IMHO would be an extension to the payment&lt;br/&gt;&amp;gt; protocol that gives you (or your wallet) a token in return for paying, and&lt;br/&gt;&amp;gt; that knowledge of that token is used to gain access to the services you&lt;br/&gt;&amp;gt; provide.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;That token would then be reusable. Someone stealing it would be able&lt;br/&gt;to use it as much as she wants. That is what I want to avoid with PoP.&lt;br/&gt;The BIP proposal briefly mentions something like this in the&lt;br/&gt;rationale. I also had a discussion about this with Mike Hearn on this&lt;br/&gt;list on Mars 13 that I think covers most pros and cons of the&lt;br/&gt;different approaches.&lt;br/&gt;&lt;br/&gt;While your suggestion does indeed separate the transaction from the&lt;br/&gt;proof of payment, it also assumes that the token is held in the wallet&lt;br/&gt;that pays. Otherwise you would need to keep it in another safe place,&lt;br/&gt;remember it&amp;#39;s reusable. Where would that be? How would you transfer&lt;br/&gt;that token to your friend?&lt;br/&gt;&lt;br/&gt;Thank you again for your comments. I appreciate it.&lt;br/&gt;&lt;br/&gt;Best regards,&lt;br/&gt;Kalle&lt;br/&gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; Pieter&lt;br/&gt;&amp;gt;
    </content>
    <updated>2023-06-07T15:36:54Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsdn7sn2x3mpttrw9awurwn450rp7lm5jxfe5k0hsugdsazmtx7v2gzyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e22k4n9p</id>
    
      <title type="html">📅 Original date posted:2015-06-15 📝 Original ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsdn7sn2x3mpttrw9awurwn450rp7lm5jxfe5k0hsugdsazmtx7v2gzyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e22k4n9p" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsve4pvy9fjyz8s6pyqm78k7l7c3xpfz698j4tx9tuq5agj6qzeu3g4wgzwe&#39;&gt;nevent1q…gzwe&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-06-15&lt;br/&gt;📝 Original message:2015-06-15 12:00 GMT&#43;02:00 Pieter Wuille &amp;lt;pieter.wuille at gmail.com&amp;gt;:&lt;br/&gt;&amp;gt; I did misunderstand that. That changes things significantly.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; However, having paid is not the same as having had access to the input&lt;br/&gt;&amp;gt; coins. What about shared wallets or coinjoin?&lt;br/&gt;&lt;br/&gt;Wallets will have the same ability to make PoPs as they have in making&lt;br/&gt;payments, see my motivation and rationale sections. CoinJoin is not&lt;br/&gt;compatible with PoP, Luke-Jr brought that up a week ago:&lt;br/&gt;&lt;br/&gt;&amp;#34;This appears to be incompatible with CoinJoin at least. Maybe there&amp;#39;s some&lt;br/&gt;clean way to avoid that by using&lt;br/&gt;&lt;a href=&#34;https://github.com/Blockstream/contracthashtool&#34;&gt;https://github.com/Blockstream/contracthashtool&lt;/a&gt; ?&amp;#34;&lt;br/&gt;&lt;br/&gt;I&amp;#39;m not sure if we will be able to support PoP with CoinJoin. Maybe&lt;br/&gt;someone with more insight into CoinJoin have some input?&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Also, if I understand correctly, there is no commitment to anything you&amp;#39;re&lt;br/&gt;&amp;gt; trying to say about the sender? So once I obtain a proof-of-payment from you&lt;br/&gt;&amp;gt; about something you paid, I can go claim that it&amp;#39;s mine?&lt;br/&gt;&lt;br/&gt;I don&amp;#39;t understand this. The pop includes a nonce randomly generated&lt;br/&gt;by the server. If you&amp;#39;re very lucky, 1/(2^48) per try, you can reuse a&lt;br/&gt;pop.&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Why does anyone care who paid? This is like walking into a coffeshop,&lt;br/&gt;&amp;gt; noticing I don&amp;#39;t have money with me, let me friend pay for me, and then have&lt;br/&gt;&amp;gt; the shop insist that I can&amp;#39;t drink it because I&amp;#39;m not the buyer.&lt;br/&gt;&lt;br/&gt;If you pay as you use the service (ie pay for coffee upfront), there&amp;#39;s&lt;br/&gt;no need for PoP. Please see the Motivation section. But you are right&lt;br/&gt;that you must have the wallet(s) that paid at hand when you issue a&lt;br/&gt;PoP.&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Track payments, don&amp;#39;t try to assign identities to payers.&lt;br/&gt;&lt;br/&gt;Please elaborate, I don&amp;#39;t understand what you mean here.&lt;br/&gt;&lt;br/&gt;Regards,&lt;br/&gt;Kalle&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Jun 15, 2015 11:35 AM, &amp;#34;Kalle Rosenbaum&amp;#34; &amp;lt;kalle at rosenbaum.se&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi Pieter!&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; It is intended to be a proof that you *have paid* for something. Not&lt;br/&gt;&amp;gt;&amp;gt; that you have the intent to pay for something. You cannot use PoP&lt;br/&gt;&amp;gt;&amp;gt; without a transaction to prove.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; So, yes, it&amp;#39;s just a proof of access to certain coins that you no longer&lt;br/&gt;&amp;gt;&amp;gt; have.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Maybe I don&amp;#39;t understand you correctly?&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; /Kalle&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; 2015-06-15 11:27 GMT&#43;02:00 Pieter Wuille &amp;lt;pieter.wuille at gmail.com&amp;gt;:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Now that you have removed the outputs, I don&amp;#39;t think it&amp;#39;s even a intent&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; of&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; payment, but just a proof of access to certain coins.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; On Jun 15, 2015 11:24 AM, &amp;#34;Kalle Rosenbaum&amp;#34; &amp;lt;kalle at rosenbaum.se&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Hi all!&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; I have made the discussed changes and updated my implementation&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; (&lt;a href=&#34;https://github.com/kallerosenbaum/poppoc&#34;&gt;https://github.com/kallerosenbaum/poppoc&lt;/a&gt;) accordingly. These are the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; changes:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * There is now only one output, the &amp;#34;pop output&amp;#34;, of value 0.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * The sequence number of all inputs of the PoP must be set to 0. I&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; chose to set it to 0 for all inputs for simplicity.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * The lock_time of the PoP must be set to 499999999 (max block height&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; lock&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; time).&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; The comments so far has been mainly positive or neutral. Are there any&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; major objections against any of the two proposals? If not, I will ask&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Gregory Maxwell to assign them BIP numbers.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; The two BIP proposals can be found at&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/kallerosenbaum/poppoc/wiki/Proof-of-Payment-BIP&#34;&gt;https://github.com/kallerosenbaum/poppoc/wiki/Proof-of-Payment-BIP&lt;/a&gt; and&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/kallerosenbaum/poppoc/wiki/btcpop-scheme-BIP&#34;&gt;https://github.com/kallerosenbaum/poppoc/wiki/btcpop-scheme-BIP&lt;/a&gt;. The&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; source&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; for the Proof of Payment BIP proposal is also in-lined below.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; A number of alternative names have been proposed:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * Proof of Potential&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * Proof of Control&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * Proof of Signature&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * Signatory Proof&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * Popo: Proof of payment origin&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * Pots: Proof of transaction signer&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * proof of transaction intent&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * Declaration of intent&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * Asset-access-and-action-affirmation, AAaAA, or A5&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * VeriBit&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * CertiBTC&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * VBit&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * PayID&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Given this list, I still think &amp;#34;Proof of Payment&amp;#34; is the most&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; descriptive&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; to non-technical people.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Kalle&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; #################################################&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;lt;pre&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;   BIP: &amp;lt;BIP number&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;   Title: Proof of Payment&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;   Author: Kalle Rosenbaum &amp;lt;kalle at rosenbaum.se&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;   Status: Draft&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;   Type: Standards Track&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;   Created: &amp;lt;date created on, in ISO 8601 (yyyy-mm-dd) format&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;lt;/pre&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; == Abstract ==&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; This BIP describes how a wallet can prove to a server that it has the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; ability to sign a certain transaction.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; == Motivation ==&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; There are several scenarios in which it would be useful to prove that&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; you&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; have paid for something. For example:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * A pre-paid hotel room where your PoP functions as a key to the door.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * An online video rental service where you pay for a video and watch it&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; on&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; any device.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * An ad-sign where you pay in advance for e.g. 2 weeks exclusivity.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; During&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; this period you can upload new content to the sign whenever you like&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; using&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; PoP.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * Log in to a pay site using a PoP.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * A parking lot you pay for monthly and the car authenticates itself&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; using&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; PoP.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * A lottery where all participants pay to the same address, and the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; winner&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; is selected among the transactions to that address. You exchange the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; prize&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; for a PoP for the winning transaction.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; With Proof of Payment, these use cases can be achieved without any&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; personal information (user name, password, e-mail address, etc) being&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; involved.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; == Rationale ==&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Desirable properties:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # A PoP should be generated on demand.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # It should only be usable once to avoid issues due to theft.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # It should be able to create a PoP for any payment, regardless of&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; script&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; type (P2SH, P2PKH, etc.).&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # It should prove that you have enough credentials to unlock all the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; inputs of the proven transaction.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # It should be easy to implement by wallets and servers to ease&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; adoption.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Current methods of proving a payment:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * In BIP0070, the PaymentRequest together with the transactions&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; fulfilling&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; the request makes some sort of proof. However, it does not meet 1, 2 or&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; 4&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; and it obviously only meets 3 if the payment is made through BIP0070.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Also,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; there&amp;#39;s no standard way to request/provide the proof. If standardized&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; it&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; would probably meet 5.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * Signing messages, chosen by the server, with the private keys used to&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; sign the transaction. This could meet 1 and 2 but probably not 3. This&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; is&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; not standardized either. 4 Could be met if designed so.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; If an input script type is P2SH, any satisfying script should do, just&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; as&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; if it was a payment. For M-of-N multisig scripts, that would mean that&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; any&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; set of M keys should be sufficient, not neccesarily the same set of M&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; keys&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; that signed the transaction. This is important because strictly&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; demanding&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; the same set of M keys would defeat the purpose of a multisig address.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; == Specification ==&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; === Data structure ===&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; A proof of payment for a transaction T, here called PoP(T), is used to&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; prove that one has ownership of the credentials needed to unlock all&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; inputs of T. It has the exact same structure as a bitcoin transaction&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; with&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; the same inputs as T and in the same order as in T, but with each&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; sequence&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; number set to 0. There is exactly one output, here called the pop&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; output,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; with value 0. The pop output must have the following format:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  OP_RETURN &amp;lt;version&amp;gt; &amp;lt;txid&amp;gt; &amp;lt;nonce&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; {|&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; ! Field        !! Size [B] !! Description&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; |-&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; | &amp;amp;lt;version&amp;gt; || 2        || Version, little endian, currently 0x01&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; 0x00&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; |-&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; | &amp;amp;lt;txid&amp;gt;    || 32       || The transaction to prove&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; |-&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; | &amp;amp;lt;nonce&amp;gt;   || 6        || Random data&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; |}&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; The lock_time of the PoP must be set to 499999999 to prevent the PoP&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; from&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; being included in a block, should it appear on the bitcoin p2p network.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; This&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; is also the reason for setting the sequence numbers to 0, since&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; sequence&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; number of ffffffff would make lock_time ineffective. This specification&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; demands that all input sequence numbers are 0, not just one of them,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; which&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; would be sufficient to make lock_time effective. This is for simplicity&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; reasons.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; An illustration of the PoP data structure and its original payment is&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; shown below.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;lt;pre&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;   T&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  &#43;------------------------------------------------&#43;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  |inputs                | outputs                 |&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  |       Value,Sequence | Value,Script            |&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  &#43;------------------------------------------------&#43;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  |input0 1,ffffffff     | 0,pay to A              |&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  |input1 3,ffffffff     | 2,OP_RETURN &amp;lt;some data&amp;gt; |&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  |input2 4,ffffffff     | 1,pay to B              |&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  |                      | 4,pay to C              |&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  &#43;------------------------------------------------&#43;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;   PoP(T)&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  &#43;-------------------------------------------------------------&#43;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  | inputs               | outputs                              |&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  |       Value,Sequence | Value,Script                         |&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  &#43;-------------------------------------------------------------&#43;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  |input0 1,00000000     | 0,OP_RETURN &amp;lt;version&amp;gt; &amp;lt;txid&amp;gt; &amp;lt;nonce&amp;gt; |&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  |input1 3,00000000     |                                      |&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  |input2 4,00000000     |                                      |&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  &#43;-------------------------------------------------------------&#43;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  | lock_time=499999999                                         |&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;  &#43;-------------------------------------------------------------&#43;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;lt;/pre&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; The PoP is signed using the same signing process that is used for&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; bitcoin&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; transactions.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; The purpose of the nonce is to make it harder to use a stolen PoP; Once&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; the PoP has reached the server, that PoP is useless since the server&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; will&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; generate a new nonce for every PoP request.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; === Process ===&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # A proof of payment request is sent from the server to the wallet. The&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; PoP request contains:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; ## a random nonce&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; ## a destination where to send the PoP, for example a https URL&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; ## data hinting the wallet which transaction to create a proof for. For&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; example:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; ##* txid, if known by the server&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; ##* PaymentRequest.PaymentDetails.merchant_data (in case of a BIP0070&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; payment)&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; ##* amount, label, message or other information from a BIP0021 URI&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # The wallet identifies a transaction T, if possible. Otherwise it asks&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; the user to select among the ones that match the hints in 1.iii.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # The wallet creates an unsigned PoP (UPoP) for T, and asks the user to&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; sign it.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # The user confirms&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # The UPoP(T) is signed by the wallet, creating PoP(T).&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # The PoP is sent to the destination in 1.ii.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # The server receiving the PoP validates it and responds with “valid”&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; or&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; “invalid”.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # The wallet displays the response in some way to the user.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;#39;&amp;#39;&amp;#39;Remarks:&amp;#39;&amp;#39;&amp;#39;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * The method of transferring the PoP request at step 1 is not specified&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; here. Instead that is specified in separate specifications. See [btcpop&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; scheme BIP](btcpop scheme BIP).&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * The nonce must be randomly generated by the server for every new PoP&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; request.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; === Validating a PoP ===&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; The server needs to validate the PoP and reply with &amp;#34;valid&amp;#34; or&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;#34;invalid&amp;#34;.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; That process is outlined below. If any step fails, the validation is&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; aborted&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; and &amp;#34;invalid&amp;#34; is returned:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # Check the format of the PoP. It must pass normal transaction checks,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; except that the inputs may already be spent.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # Check that lock_time is 499999999.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # Check that there is exactly one output. This output must have value 0&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; and conform to the OP_RETURN output format outlined above.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # Check that the nonce is the same as the one requested.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # Check that the inputs of the PoP are exactly the same as in&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; transaction&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; T, except that the sequence numbers must all be 0. The ordering of the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; inputs must also be the same as in T.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # Run the scripts of all the inputs. All scipts must return true.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # Check that the txid in the PoP output is the transaction you actually&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; want proof for. If you don’t know exactly what transaction you want&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; proof&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; for, check that the transaction actually pays for the product/service&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; you&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; deliver.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; # Return &amp;#34;valid&amp;#34;.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; == Security considerations ==&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * Someone can intercept the PoP-request and change any parameter in it.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; These can be mitigated by using secure connections. For example:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; ** Pop destination - Stealing your PoP.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; ** label - Trick you to sign an unintended pop or set a label that your&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; wallet doesn&amp;#39;t have any record for, resulting in a broken service.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Always&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; check the PoP before signing.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; ** nonce - Your pop will not validate on server.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * Someone can steal a PoP, for example by tampering with the PoP&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; request,&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; and try to use the service hoping to get a matching nonce. Probability&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; per&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; try: 1/(2^48). The server should have a mechanism for detecting a brute&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; force attack of this kind, or at least slow down the process by&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; delaying the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; PoP request by some 100 ms or so.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * Even if a wallet has no funds it might still be valuable as a&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; generator&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; for PoPs. This makes it important to keep the security of the wallet&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; after&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; it has been emptied.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; * Transaction malleability may cause the server to have another&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; transaction id for a payment than the client&amp;#39;s wallet. In that case the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; wallet will not be able to prove the transaction to the server. Wallets&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; should not rely on the transaction id of the outgoing transaction.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Instead&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; it should listen for the transaction on the network and put that in its&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; list&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; of transactions.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; == Reference implementation ==&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; [&lt;a href=&#34;https://github.com/kallerosenbaum/poppoc&#34;&gt;https://github.com/kallerosenbaum/poppoc&lt;/a&gt; poppoc on GitHub]&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; [&lt;a href=&#34;https://github.com/kallerosenbaum/wallet&#34;&gt;https://github.com/kallerosenbaum/wallet&lt;/a&gt; Mycelium fork on GitHub]&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; == References ==&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; [&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; BIP0021]:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; URI Scheme&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; [&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; BIP0070]:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Payment Protocol&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; [[btcpop scheme BIP]]&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; #########################################################&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; 2015-06-06 23:25 GMT&#43;02:00 Kalle Rosenbaum &amp;lt;kalle at rosenbaum.se&amp;gt;:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; Thank you all for the feedback.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; I will change the data structure as follows:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; * There will be only one output, the &amp;#34;pop output&amp;#34;, and no outputs&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; from&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; T will be copied to the PoP.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; * The pop output will have value 0.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; * The sequence number of all inputs of the PoP will be set to 0. I&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; chose to set it to 0 for all inputs for simplicity.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; * The lock_time of the PoP is always set to 499999999.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; Any comments on this?&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; /Kalle&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt; 2015-06-06 19:00 GMT&#43;02:00 Kalle Rosenbaum &amp;lt;kalle at rosenbaum.se&amp;gt;:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; 2015-06-06 18:10 GMT&#43;02:00 Tom Harding &amp;lt;tomh at thinlink.com&amp;gt;:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; On Jun 6, 2015 8:05 AM, &amp;#34;Kalle Rosenbaum&amp;#34; &amp;lt;kalle at rosenbaum.se&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;m open to changes here.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; I suggest:&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; - Don&amp;#39;t include any real outputs.   They are redundant because the&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; txid is&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; already referenced.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; with the nLocktime solution, the copied outputs are not needed.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; - Start the proof script, which should be invalid, with a magic&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; constant and&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; include space for future expansion.  This makes PoP&amp;#39;s easy to&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; identify&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; and&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; extend.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; I did remore the constant (a &amp;#34;PoP&amp;#34; literal ascii encoded string)&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; because it didn&amp;#39;t add much. The recipient will expect a pop, so it&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; will simply treat it as one. I did add a 2 byte version field to&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; make&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; it extendable.&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt; - &amp;#34;Proof of Potential&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; Noted :-)&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; Thank you&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; /Kalle&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; ------------------------------------------------------------------------------&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Bitcoin-development mailing list&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; Bitcoin-development at lists.sourceforge.net&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; &lt;a href=&#34;https://lists.sourceforge.net/lists/listinfo/bitcoin-development&#34;&gt;https://lists.sourceforge.net/lists/listinfo/bitcoin-development&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt;
    </content>
    <updated>2023-06-07T15:36:53Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqs0h29pkf5fq58y8f2qs2pnlyuckwecphy28vw28ntnk67mc8uvscgzyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2juchxk</id>
    
      <title type="html">📅 Original date posted:2015-06-06 📝 Original ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs0h29pkf5fq58y8f2qs2pnlyuckwecphy28vw28ntnk67mc8uvscgzyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2juchxk" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsyvt8jswykutp8zdpxtn9euylrks4a0wcwm62wwe20nprpddccgjg46d3la&#39;&gt;nevent1q…d3la&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-06-06&lt;br/&gt;📝 Original message:2015-06-06 17:32 GMT&#43;02:00 Peter Todd &amp;lt;pete at petertodd.org&amp;gt;:&lt;br/&gt;&amp;gt; On Sat, Jun 06, 2015 at 05:23:48PM &#43;0200, Pieter Wuille wrote:&lt;br/&gt;&amp;gt;&amp;gt; On Sat, Jun 6, 2015 at 5:18 PM, Luke Dashjr &amp;lt;luke at dashjr.org&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; I also agree with Pieter, that this should *not* be so cleanly compatible&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; with Bitcoin transactions. If you wish to share code, perhaps using an&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; invalid opcode rather than OP_RETURN would be appropriate.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Using an invalid opcode would merely send funds into the void. It wouldn&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt; invalidate the transaction.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Just set nLockTime to 500000000-1 and nSequence appropriately to make&lt;br/&gt;&amp;gt; the transaction impossible to mine for the next 9500 years.&lt;br/&gt;&lt;br/&gt;Actually, I suggested that on this list on april 27, but shortly after&lt;br/&gt;rejected my own idea:&lt;br/&gt;&lt;br/&gt;#######################&lt;br/&gt;&amp;#34;Or a really high lock_time, but it would not make it invalid, just delayed.&amp;#34;&lt;br/&gt;&lt;br/&gt;Ok, this was a bad idea, since nodes would have to keep it in memory.&lt;br/&gt;Please disregard that idea...&lt;br/&gt;########################&lt;br/&gt;&lt;br/&gt;Now I think I rejected it on based on a misunderstanding. Nodes will&lt;br/&gt;not put them in their mempool unless it&amp;#39;s value is near in time,&lt;br/&gt;right? From the 0.9.0 release notes: &amp;#34;Accept nLockTime transactions&lt;br/&gt;that finalize in the next block&amp;#34;.&lt;br/&gt;&lt;br/&gt;In that case this is a really nice option.&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Though I agree that this whole idea seems a bit dubious to me.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; &amp;#39;peter&amp;#39;[:-1]@petertodd.org&lt;br/&gt;&amp;gt; 00000000000000000000dd919214b66444dcebb4aa0214c1ab7c8b3b633be71f&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ------------------------------------------------------------------------------&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Bitcoin-development mailing list&lt;br/&gt;&amp;gt; Bitcoin-development at lists.sourceforge.net&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.sourceforge.net/lists/listinfo/bitcoin-development&#34;&gt;https://lists.sourceforge.net/lists/listinfo/bitcoin-development&lt;/a&gt;&lt;br/&gt;&amp;gt;
    </content>
    <updated>2023-06-07T15:36:52Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqswq339nu30hexkx5hx02ydsx7wyf9nn6kc5ujya05a9kr59zmsrrszyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2tuhwdj</id>
    
      <title type="html">📅 Original date posted:2015-06-15 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqswq339nu30hexkx5hx02ydsx7wyf9nn6kc5ujya05a9kr59zmsrrszyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2tuhwdj" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs03upty9yz6qej5je6zr6wgr7zlnmq4esvnt7pdjh7tcrew5yy8vcg5s3jv&#39;&gt;nevent1q…s3jv&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-06-15&lt;br/&gt;📝 Original message:Hi all!&lt;br/&gt;&lt;br/&gt;I have made the discussed changes and updated my implementation (&lt;br/&gt;&lt;a href=&#34;https://github.com/kallerosenbaum/poppoc&#34;&gt;https://github.com/kallerosenbaum/poppoc&lt;/a&gt;) accordingly. These are the&lt;br/&gt;changes:&lt;br/&gt;&lt;br/&gt;* There is now only one output, the &amp;#34;pop output&amp;#34;, of value 0.&lt;br/&gt;* The sequence number of all inputs of the PoP must be set to 0. I&lt;br/&gt;chose to set it to 0 for all inputs for simplicity.&lt;br/&gt;* The lock_time of the PoP must be set to 499999999 (max block height lock&lt;br/&gt;time).&lt;br/&gt;&lt;br/&gt;The comments so far has been mainly positive or neutral. Are there any&lt;br/&gt;major objections against any of the two proposals? If not, I will ask&lt;br/&gt;Gregory Maxwell to assign them BIP numbers.&lt;br/&gt;&lt;br/&gt;The two BIP proposals can be found at&lt;br/&gt;&lt;a href=&#34;https://github.com/kallerosenbaum/poppoc/wiki/Proof-of-Payment-BIP&#34;&gt;https://github.com/kallerosenbaum/poppoc/wiki/Proof-of-Payment-BIP&lt;/a&gt; and&lt;br/&gt;&lt;a href=&#34;https://github.com/kallerosenbaum/poppoc/wiki/btcpop-scheme-BIP&#34;&gt;https://github.com/kallerosenbaum/poppoc/wiki/btcpop-scheme-BIP&lt;/a&gt;. The source&lt;br/&gt;for the Proof of Payment BIP proposal is also in-lined below.&lt;br/&gt;&lt;br/&gt;A number of alternative names have been proposed:&lt;br/&gt;&lt;br/&gt;* Proof of Potential&lt;br/&gt;* Proof of Control&lt;br/&gt;* Proof of Signature&lt;br/&gt;* Signatory Proof&lt;br/&gt;* Popo: Proof of payment origin&lt;br/&gt;* Pots: Proof of transaction signer&lt;br/&gt;* proof of transaction intent&lt;br/&gt;* Declaration of intent&lt;br/&gt;* Asset-access-and-action-affirmation, AAaAA, or A5&lt;br/&gt;* VeriBit&lt;br/&gt;* CertiBTC&lt;br/&gt;* VBit&lt;br/&gt;* PayID&lt;br/&gt;&lt;br/&gt;Given this list, I still think &amp;#34;Proof of Payment&amp;#34; is the most descriptive&lt;br/&gt;to non-technical people.&lt;br/&gt;&lt;br/&gt;Regards,&lt;br/&gt;Kalle&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;#################################################&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;  BIP: &amp;lt;BIP number&amp;gt;&lt;br/&gt;  Title: Proof of Payment&lt;br/&gt;  Author: Kalle Rosenbaum &amp;lt;kalle at rosenbaum.se&amp;gt;&lt;br/&gt;  Status: Draft&lt;br/&gt;  Type: Standards Track&lt;br/&gt;  Created: &amp;lt;date created on, in ISO 8601 (yyyy-mm-dd) format&amp;gt;&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;== Abstract ==&lt;br/&gt;&lt;br/&gt;This BIP describes how a wallet can prove to a server that it has the&lt;br/&gt;ability to sign a certain transaction.&lt;br/&gt;&lt;br/&gt;== Motivation ==&lt;br/&gt;&lt;br/&gt;There are several scenarios in which it would be useful to prove that you&lt;br/&gt;have paid for something. For example:&lt;br/&gt;&lt;br/&gt;* A pre-paid hotel room where your PoP functions as a key to the door.&lt;br/&gt;* An online video rental service where you pay for a video and watch it on&lt;br/&gt;any device.&lt;br/&gt;* An ad-sign where you pay in advance for e.g. 2 weeks exclusivity. During&lt;br/&gt;this period you can upload new content to the sign whenever you like using&lt;br/&gt;PoP.&lt;br/&gt;* Log in to a pay site using a PoP.&lt;br/&gt;* A parking lot you pay for monthly and the car authenticates itself using&lt;br/&gt;PoP.&lt;br/&gt;* A lottery where all participants pay to the same address, and the winner&lt;br/&gt;is selected among the transactions to that address. You exchange the prize&lt;br/&gt;for a PoP for the winning transaction.&lt;br/&gt;&lt;br/&gt;With Proof of Payment, these use cases can be achieved without any personal&lt;br/&gt;information (user name, password, e-mail address, etc) being involved.&lt;br/&gt;&lt;br/&gt;== Rationale ==&lt;br/&gt;&lt;br/&gt;Desirable properties:&lt;br/&gt;&lt;br/&gt;# A PoP should be generated on demand.&lt;br/&gt;# It should only be usable once to avoid issues due to theft.&lt;br/&gt;# It should be able to create a PoP for any payment, regardless of script&lt;br/&gt;type (P2SH, P2PKH, etc.).&lt;br/&gt;# It should prove that you have enough credentials to unlock all the inputs&lt;br/&gt;of the proven transaction.&lt;br/&gt;# It should be easy to implement by wallets and servers to ease adoption.&lt;br/&gt;&lt;br/&gt;Current methods of proving a payment:&lt;br/&gt;&lt;br/&gt;* In BIP0070, the PaymentRequest together with the transactions fulfilling&lt;br/&gt;the request makes some sort of proof. However, it does not meet 1, 2 or 4&lt;br/&gt;and it obviously only meets 3 if the payment is made through BIP0070. Also,&lt;br/&gt;there&amp;#39;s no standard way to request/provide the proof. If standardized it&lt;br/&gt;would probably meet 5.&lt;br/&gt;* Signing messages, chosen by the server, with the private keys used to&lt;br/&gt;sign the transaction. This could meet 1 and 2 but probably not 3. This is&lt;br/&gt;not standardized either. 4 Could be met if designed so.&lt;br/&gt;&lt;br/&gt;If an input script type is P2SH, any satisfying script should do, just as&lt;br/&gt;if it was a payment. For M-of-N multisig scripts, that would mean that any&lt;br/&gt;set of M keys should be sufficient, not neccesarily the same set of M keys&lt;br/&gt;that signed the transaction. This is important because strictly demanding&lt;br/&gt;the same set of M keys would defeat the purpose of a multisig address.&lt;br/&gt;&lt;br/&gt;== Specification ==&lt;br/&gt;&lt;br/&gt;=== Data structure ===&lt;br/&gt;&lt;br/&gt;A proof of payment for a transaction T, here called PoP(T), is used to&lt;br/&gt;prove that one has ownership of the credentials needed to unlock all the&lt;br/&gt;inputs of T. It has the exact same structure as a bitcoin transaction with&lt;br/&gt;the same inputs as T and in the same order as in T, but with each sequence&lt;br/&gt;number set to 0. There is exactly one output, here called the pop output,&lt;br/&gt;with value 0. The pop output must have the following format:&lt;br/&gt;&lt;br/&gt; OP_RETURN &amp;lt;version&amp;gt; &amp;lt;txid&amp;gt; &amp;lt;nonce&amp;gt;&lt;br/&gt;&lt;br/&gt;{|&lt;br/&gt;! Field        !! Size [B] !! Description&lt;br/&gt;|-&lt;br/&gt;| &amp;amp;lt;version&amp;gt; || 2        || Version, little endian, currently 0x01 0x00&lt;br/&gt;|-&lt;br/&gt;| &amp;amp;lt;txid&amp;gt;    || 32       || The transaction to prove&lt;br/&gt;|-&lt;br/&gt;| &amp;amp;lt;nonce&amp;gt;   || 6        || Random data&lt;br/&gt;|}&lt;br/&gt;&lt;br/&gt;The lock_time of the PoP must be set to 499999999 to prevent the PoP from&lt;br/&gt;being included in a block, should it appear on the bitcoin p2p network.&lt;br/&gt;This is also the reason for setting the sequence numbers to 0, since&lt;br/&gt;sequence number of ffffffff would make lock_time ineffective. This&lt;br/&gt;specification demands that all input sequence numbers are 0, not just one&lt;br/&gt;of them, which would be sufficient to make lock_time effective. This is for&lt;br/&gt;simplicity reasons.&lt;br/&gt;&lt;br/&gt;An illustration of the PoP data structure and its original payment is shown&lt;br/&gt;below.&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;  T&lt;br/&gt; &#43;------------------------------------------------&#43;&lt;br/&gt; |inputs                | outputs                 |&lt;br/&gt; |       Value,Sequence | Value,Script            |&lt;br/&gt; &#43;------------------------------------------------&#43;&lt;br/&gt; |input0 1,ffffffff     | 0,pay to A              |&lt;br/&gt; |input1 3,ffffffff     | 2,OP_RETURN &amp;lt;some data&amp;gt; |&lt;br/&gt; |input2 4,ffffffff     | 1,pay to B              |&lt;br/&gt; |                      | 4,pay to C              |&lt;br/&gt; &#43;------------------------------------------------&#43;&lt;br/&gt;&lt;br/&gt;  PoP(T)&lt;br/&gt; &#43;-------------------------------------------------------------&#43;&lt;br/&gt; | inputs               | outputs                              |&lt;br/&gt; |       Value,Sequence | Value,Script                         |&lt;br/&gt; &#43;-------------------------------------------------------------&#43;&lt;br/&gt; |input0 1,00000000     | 0,OP_RETURN &amp;lt;version&amp;gt; &amp;lt;txid&amp;gt; &amp;lt;nonce&amp;gt; |&lt;br/&gt; |input1 3,00000000     |                                      |&lt;br/&gt; |input2 4,00000000     |                                      |&lt;br/&gt; &#43;-------------------------------------------------------------&#43;&lt;br/&gt; | lock_time=499999999                                         |&lt;br/&gt; &#43;-------------------------------------------------------------&#43;&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;The PoP is signed using the same signing process that is used for bitcoin&lt;br/&gt;transactions.&lt;br/&gt;&lt;br/&gt;The purpose of the nonce is to make it harder to use a stolen PoP; Once the&lt;br/&gt;PoP has reached the server, that PoP is useless since the server will&lt;br/&gt;generate a new nonce for every PoP request.&lt;br/&gt;&lt;br/&gt;=== Process ===&lt;br/&gt;&lt;br/&gt;# A proof of payment request is sent from the server to the wallet. The PoP&lt;br/&gt;request contains:&lt;br/&gt;## a random nonce&lt;br/&gt;## a destination where to send the PoP, for example a https URL&lt;br/&gt;## data hinting the wallet which transaction to create a proof for. For&lt;br/&gt;example:&lt;br/&gt;##* txid, if known by the server&lt;br/&gt;##* PaymentRequest.PaymentDetails.merchant_data (in case of a BIP0070&lt;br/&gt;payment)&lt;br/&gt;##* amount, label, message or other information from a BIP0021 URI&lt;br/&gt;# The wallet identifies a transaction T, if possible. Otherwise it asks the&lt;br/&gt;user to select among the ones that match the hints in 1.iii.&lt;br/&gt;# The wallet creates an unsigned PoP (UPoP) for T, and asks the user to&lt;br/&gt;sign it.&lt;br/&gt;# The user confirms&lt;br/&gt;# The UPoP(T) is signed by the wallet, creating PoP(T).&lt;br/&gt;# The PoP is sent to the destination in 1.ii.&lt;br/&gt;# The server receiving the PoP validates it and responds with “valid” or&lt;br/&gt;“invalid”.&lt;br/&gt;# The wallet displays the response in some way to the user.&lt;br/&gt;&lt;br/&gt;&amp;#39;&amp;#39;&amp;#39;Remarks:&amp;#39;&amp;#39;&amp;#39;&lt;br/&gt;&lt;br/&gt;* The method of transferring the PoP request at step 1 is not specified&lt;br/&gt;here. Instead that is specified in separate specifications. See [btcpop&lt;br/&gt;scheme BIP](btcpop scheme BIP).&lt;br/&gt;* The nonce must be randomly generated by the server for every new PoP&lt;br/&gt;request.&lt;br/&gt;&lt;br/&gt;=== Validating a PoP ===&lt;br/&gt;&lt;br/&gt;The server needs to validate the PoP and reply with &amp;#34;valid&amp;#34; or &amp;#34;invalid&amp;#34;.&lt;br/&gt;That process is outlined below. If any step fails, the validation is&lt;br/&gt;aborted and &amp;#34;invalid&amp;#34; is returned:&lt;br/&gt;&lt;br/&gt;# Check the format of the PoP. It must pass normal transaction checks,&lt;br/&gt;except that the inputs may already be spent.&lt;br/&gt;# Check that lock_time is 499999999.&lt;br/&gt;# Check that there is exactly one output. This output must have value 0 and&lt;br/&gt;conform to the OP_RETURN output format outlined above.&lt;br/&gt;# Check that the nonce is the same as the one requested.&lt;br/&gt;# Check that the inputs of the PoP are exactly the same as in transaction&lt;br/&gt;T, except that the sequence numbers must all be 0. The ordering of the&lt;br/&gt;inputs must also be the same as in T.&lt;br/&gt;# Run the scripts of all the inputs. All scipts must return true.&lt;br/&gt;# Check that the txid in the PoP output is the transaction you actually&lt;br/&gt;want proof for. If you don’t know exactly what transaction you want proof&lt;br/&gt;for, check that the transaction actually pays for the product/service you&lt;br/&gt;deliver.&lt;br/&gt;# Return &amp;#34;valid&amp;#34;.&lt;br/&gt;&lt;br/&gt;== Security considerations ==&lt;br/&gt;&lt;br/&gt;* Someone can intercept the PoP-request and change any parameter in it.&lt;br/&gt;These can be mitigated by using secure connections. For example:&lt;br/&gt;** Pop destination - Stealing your PoP.&lt;br/&gt;** label - Trick you to sign an unintended pop or set a label that your&lt;br/&gt;wallet doesn&amp;#39;t have any record for, resulting in a broken service. Always&lt;br/&gt;check the PoP before signing.&lt;br/&gt;** nonce - Your pop will not validate on server.&lt;br/&gt;* Someone can steal a PoP, for example by tampering with the PoP request,&lt;br/&gt;and try to use the service hoping to get a matching nonce. Probability per&lt;br/&gt;try: 1/(2^48). The server should have a mechanism for detecting a brute&lt;br/&gt;force attack of this kind, or at least slow down the process by delaying&lt;br/&gt;the PoP request by some 100 ms or so.&lt;br/&gt;* Even if a wallet has no funds it might still be valuable as a generator&lt;br/&gt;for PoPs. This makes it important to keep the security of the wallet after&lt;br/&gt;it has been emptied.&lt;br/&gt;* Transaction malleability may cause the server to have another transaction&lt;br/&gt;id for a payment than the client&amp;#39;s wallet. In that case the wallet will not&lt;br/&gt;be able to prove the transaction to the server. Wallets should not rely on&lt;br/&gt;the transaction id of the outgoing transaction. Instead it should listen&lt;br/&gt;for the transaction on the network and put that in its list of transactions.&lt;br/&gt;&lt;br/&gt;== Reference implementation ==&lt;br/&gt;&lt;br/&gt;[&lt;a href=&#34;https://github.com/kallerosenbaum/poppoc&#34;&gt;https://github.com/kallerosenbaum/poppoc&lt;/a&gt; poppoc on GitHub]&lt;br/&gt;&lt;br/&gt;[&lt;a href=&#34;https://github.com/kallerosenbaum/wallet&#34;&gt;https://github.com/kallerosenbaum/wallet&lt;/a&gt; Mycelium fork on GitHub]&lt;br/&gt;&lt;br/&gt;== References ==&lt;br/&gt;&lt;br/&gt;[&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki&lt;/a&gt; BIP0021]:&lt;br/&gt;URI Scheme&lt;br/&gt;&lt;br/&gt;[&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki&lt;/a&gt; BIP0070]:&lt;br/&gt;Payment Protocol&lt;br/&gt;&lt;br/&gt;[[btcpop scheme BIP]]&lt;br/&gt;&lt;br/&gt;#########################################################&lt;br/&gt;&lt;br/&gt;2015-06-06 23:25 GMT&#43;02:00 Kalle Rosenbaum &amp;lt;kalle at rosenbaum.se&amp;gt;:&lt;br/&gt;&amp;gt; Thank you all for the feedback.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I will change the data structure as follows:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * There will be only one output, the &amp;#34;pop output&amp;#34;, and no outputs from&lt;br/&gt;&amp;gt; T will be copied to the PoP.&lt;br/&gt;&amp;gt; * The pop output will have value 0.&lt;br/&gt;&amp;gt; * The sequence number of all inputs of the PoP will be set to 0. I&lt;br/&gt;&amp;gt; chose to set it to 0 for all inputs for simplicity.&lt;br/&gt;&amp;gt; * The lock_time of the PoP is always set to 499999999.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Any comments on this?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; /Kalle&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2015-06-06 19:00 GMT&#43;02:00 Kalle Rosenbaum &amp;lt;kalle at rosenbaum.se&amp;gt;:&lt;br/&gt;&amp;gt;&amp;gt; 2015-06-06 18:10 GMT&#43;02:00 Tom Harding &amp;lt;tomh at thinlink.com&amp;gt;:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; On Jun 6, 2015 8:05 AM, &amp;#34;Kalle Rosenbaum&amp;#34; &amp;lt;kalle at rosenbaum.se&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;m open to changes here.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I suggest:&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; - Don&amp;#39;t include any real outputs.   They are redundant because the txid&lt;br/&gt;is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; already referenced.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; with the nLocktime solution, the copied outputs are not needed.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; - Start the proof script, which should be invalid, with a magic&lt;br/&gt;constant and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; include space for future expansion.  This makes PoP&amp;#39;s easy to identify&lt;br/&gt;and&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; extend.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I did remore the constant (a &amp;#34;PoP&amp;#34; literal ascii encoded string)&lt;br/&gt;&amp;gt;&amp;gt; because it didn&amp;#39;t add much. The recipient will expect a pop, so it&lt;br/&gt;&amp;gt;&amp;gt; will simply treat it as one. I did add a 2 byte version field to make&lt;br/&gt;&amp;gt;&amp;gt; it extendable.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; - &amp;#34;Proof of Potential&amp;#34;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Noted :-)&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Thank you&lt;br/&gt;&amp;gt;&amp;gt; /Kalle&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150615/95a01be8/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150615/95a01be8/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T15:36:50Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsgulr3lwnw0g7q8hr5ja05g6ld9ld58eyp0q2tx3pglvyddvv8kjgzyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2zu5fva</id>
    
      <title type="html">📅 Original date posted:2015-06-06 📝 Original message:Thank ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsgulr3lwnw0g7q8hr5ja05g6ld9ld58eyp0q2tx3pglvyddvv8kjgzyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2zu5fva" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsgqfk9pfk8023mtkzy3sqk568qrc7kdvm7dhcjuhscyq0ce37lk0ckqham2&#39;&gt;nevent1q…ham2&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-06-06&lt;br/&gt;📝 Original message:Thank you all for the feedback.&lt;br/&gt;&lt;br/&gt;I will change the data structure as follows:&lt;br/&gt;&lt;br/&gt;* There will be only one output, the &amp;#34;pop output&amp;#34;, and no outputs from&lt;br/&gt;T will be copied to the PoP.&lt;br/&gt;* The pop output will have value 0.&lt;br/&gt;* The sequence number of all inputs of the PoP will be set to 0. I&lt;br/&gt;chose to set it to 0 for all inputs for simplicity.&lt;br/&gt;* The lock_time of the PoP is always set to 499999999.&lt;br/&gt;&lt;br/&gt;Any comments on this?&lt;br/&gt;&lt;br/&gt;/Kalle&lt;br/&gt;&lt;br/&gt;2015-06-06 19:00 GMT&#43;02:00 Kalle Rosenbaum &amp;lt;kalle at rosenbaum.se&amp;gt;:&lt;br/&gt;&amp;gt; 2015-06-06 18:10 GMT&#43;02:00 Tom Harding &amp;lt;tomh at thinlink.com&amp;gt;:&lt;br/&gt;&amp;gt;&amp;gt; On Jun 6, 2015 8:05 AM, &amp;#34;Kalle Rosenbaum&amp;#34; &amp;lt;kalle at rosenbaum.se&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; I&amp;#39;m open to changes here.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I suggest:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; - Don&amp;#39;t include any real outputs.   They are redundant because the txid is&lt;br/&gt;&amp;gt;&amp;gt; already referenced.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; with the nLocktime solution, the copied outputs are not needed.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; - Start the proof script, which should be invalid, with a magic constant and&lt;br/&gt;&amp;gt;&amp;gt; include space for future expansion.  This makes PoP&amp;#39;s easy to identify and&lt;br/&gt;&amp;gt;&amp;gt; extend.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I did remore the constant (a &amp;#34;PoP&amp;#34; literal ascii encoded string)&lt;br/&gt;&amp;gt; because it didn&amp;#39;t add much. The recipient will expect a pop, so it&lt;br/&gt;&amp;gt; will simply treat it as one. I did add a 2 byte version field to make&lt;br/&gt;&amp;gt; it extendable.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; - &amp;#34;Proof of Potential&amp;#34;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Noted :-)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thank you&lt;br/&gt;&amp;gt; /Kalle
    </content>
    <updated>2023-06-07T15:36:50Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsgqfk9pfk8023mtkzy3sqk568qrc7kdvm7dhcjuhscyq0ce37lk0czyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e26px9qc</id>
    
      <title type="html">📅 Original date posted:2015-06-06 📝 Original ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsgqfk9pfk8023mtkzy3sqk568qrc7kdvm7dhcjuhscyq0ce37lk0czyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e26px9qc" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqs08fx7gmqss27dm62j9htyqmz06388ydydv5zal3ss9dyfdrk9fcqlzwaln&#39;&gt;nevent1q…waln&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-06-06&lt;br/&gt;📝 Original message:2015-06-06 18:10 GMT&#43;02:00 Tom Harding &amp;lt;tomh at thinlink.com&amp;gt;:&lt;br/&gt;&amp;gt; On Jun 6, 2015 8:05 AM, &amp;#34;Kalle Rosenbaum&amp;#34; &amp;lt;kalle at rosenbaum.se&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; I&amp;#39;m open to changes here.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I suggest:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - Don&amp;#39;t include any real outputs.   They are redundant because the txid is&lt;br/&gt;&amp;gt; already referenced.&lt;br/&gt;&lt;br/&gt;with the nLocktime solution, the copied outputs are not needed.&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - Start the proof script, which should be invalid, with a magic constant and&lt;br/&gt;&amp;gt; include space for future expansion.  This makes PoP&amp;#39;s easy to identify and&lt;br/&gt;&amp;gt; extend.&lt;br/&gt;&lt;br/&gt;I did remore the constant (a &amp;#34;PoP&amp;#34; literal ascii encoded string)&lt;br/&gt;because it didn&amp;#39;t add much. The recipient will expect a pop, so it&lt;br/&gt;will simply treat it as one. I did add a 2 byte version field to make&lt;br/&gt;it extendable.&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; - &amp;#34;Proof of Potential&amp;#34;&lt;br/&gt;&lt;br/&gt;Noted :-)&lt;br/&gt;&lt;br/&gt;Thank you&lt;br/&gt;/Kalle
    </content>
    <updated>2023-06-07T15:36:50Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqszg7es44gue6564egdpjphe3994pupugwlrlnqec5kc2mvkruqswqzyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2zjar9g</id>
    
      <title type="html">📅 Original date posted:2015-06-06 📝 Original ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqszg7es44gue6564egdpjphe3994pupugwlrlnqec5kc2mvkruqswqzyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2zjar9g" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqstlnt0fpq6hxnufvs3lw538cgk00edrc98gyxerg559gm0ktes9lqx7q8hq&#39;&gt;nevent1q…q8hq&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-06-06&lt;br/&gt;📝 Original message:&amp;gt;&amp;gt; The idea is to simplify implementation. Existing software can be used&lt;br/&gt;&amp;gt;&amp;gt; as is to sign and validate PoPs. But I do agree that it would be a&lt;br/&gt;&amp;gt;&amp;gt; cleaner specification if we would make the PoP invalid as a&lt;br/&gt;&amp;gt;&amp;gt; transaction. I&amp;#39;m open to changes here. I do like the idea to prepend a&lt;br/&gt;&amp;gt;&amp;gt; constant string. But that would require changes in transaction signing&lt;br/&gt;&amp;gt;&amp;gt; and validation code, wouldn&amp;#39;t it?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Yes, of course. An alternative is adding a 21M BTC output at the end, or&lt;br/&gt;&amp;gt; bitflipping the txin prevout hashes, or another reversible transformation on&lt;br/&gt;&amp;gt; the transaction data that is guaranteed to invalidate it.&lt;br/&gt;&lt;br/&gt;If we do decide to make Pops invalid as transactions, there are a lot&lt;br/&gt;of ways to do that. I guess the main question is if we should make&lt;br/&gt;Pops invalid as transactions or not. So far I prefer to keep them&lt;br/&gt;valid for the above reason.&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I think that the risk of asking people to sign something that is not an&lt;br/&gt;&amp;gt; actual transaction, but could be used as one, is very scary.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;I would feel comfortable doing it. It&amp;#39;s just a matter of trusting your&lt;br/&gt;wallet, which you already do with your ordinary transactions.&lt;br/&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; Also, I would call it &amp;#34;proof of transaction intent&amp;#34;, as it&amp;#39;s a&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; commitment to&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; a transaction and proof of its validity, but not a proof that an actual&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; transaction took place, nor a means to prevent it from being double&lt;br/&gt;&amp;gt;&amp;gt; &amp;gt; spent.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Naming is hard. I think a simpler name that explains what its main&lt;br/&gt;&amp;gt;&amp;gt; purpose is (prove that you paid for something) is better than a name&lt;br/&gt;&amp;gt;&amp;gt; that exactly tries to explain what it is.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; &amp;#34;Proof of Payment&amp;#34; indeed does make me think it&amp;#39;s something that proves you&lt;br/&gt;&amp;gt; paid. But as described, that is not what a PoP does. It proves the ability&lt;br/&gt;&amp;gt; to create a particular transaction, and committing to it. There is no actual&lt;br/&gt;&amp;gt; payment involved (plus, payment makes me think you&amp;#39;re talking about BIP70&lt;br/&gt;&amp;gt; payments, not simple Bitcoin transactions).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;#34;Proof of transaction&lt;br/&gt;&amp;gt;&amp;gt; intent&amp;#34; does not help me understand what this is about. But I would&lt;br/&gt;&amp;gt;&amp;gt; like to see more name suggestions. The name does not prevent people&lt;br/&gt;&amp;gt;&amp;gt; from using it for other purposes, ie internet over telephone network.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I don&amp;#39;t understand why something like &amp;#34;Proof of Transaction Intent&amp;#34; would be&lt;br/&gt;&amp;gt; incompatible with internet over telephone network either...&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;No, I meant that it&amp;#39;s ok to call it Proof of Payment even though&lt;br/&gt;people may use it for other stuff.&lt;br/&gt;&lt;br/&gt;&amp;gt; --&lt;br/&gt;&amp;gt; Pieter&lt;br/&gt;&amp;gt;
    </content>
    <updated>2023-06-07T15:36:49Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsghpte66r7g9ky2df3v7resjzp4k3fh2rwssyzf6udjvk4jutcpvqzyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2ugpxat</id>
    
      <title type="html">📅 Original date posted:2015-06-06 📝 Original message:&amp;gt; ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsghpte66r7g9ky2df3v7resjzp4k3fh2rwssyzf6udjvk4jutcpvqzyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2ugpxat" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsz0xnm2dt2pnt9zjx59v0fdqa9wyntwdnpt367kkzz4tcg5edsajc8rzdrm&#39;&gt;nevent1q…zdrm&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-06-06&lt;br/&gt;📝 Original message:&amp;gt; What do you gain by making PoPs actually valid transactions? You could for&lt;br/&gt;&amp;gt; example change the signature hashing algorithm (prepend a constant string,&lt;br/&gt;&amp;gt; or add a second hashing step) for signing, rendering the signatures in a PoP&lt;br/&gt;&amp;gt; unusable for actual transaction, while still committing to the same actual&lt;br/&gt;&amp;gt; transaction. That would also remove the need for the OP_RETURN to catch&lt;br/&gt;&amp;gt; fees.&lt;br/&gt;&lt;br/&gt;The idea is to simplify implementation. Existing software can be used&lt;br/&gt;as is to sign and validate PoPs. But I do agree that it would be a&lt;br/&gt;cleaner specification if we would make the PoP invalid as a&lt;br/&gt;transaction. I&amp;#39;m open to changes here. I do like the idea to prepend a&lt;br/&gt;constant string. But that would require changes in transaction signing&lt;br/&gt;and validation code, wouldn&amp;#39;t it?&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Also, I would call it &amp;#34;proof of transaction intent&amp;#34;, as it&amp;#39;s a commitment to&lt;br/&gt;&amp;gt; a transaction and proof of its validity, but not a proof that an actual&lt;br/&gt;&amp;gt; transaction took place, nor a means to prevent it from being double spent.&lt;br/&gt;&amp;gt;&lt;br/&gt;&lt;br/&gt;Naming is hard. I think a simpler name that explains what its main&lt;br/&gt;purpose is (prove that you paid for something) is better than a name&lt;br/&gt;that exactly tries to explain what it is. &amp;#34;Proof of transaction&lt;br/&gt;intent&amp;#34; does not help me understand what this is about. But I would&lt;br/&gt;like to see more name suggestions. The name does not prevent people&lt;br/&gt;from using it for other purposes, ie internet over telephone network.&lt;br/&gt;&lt;br/&gt;Thank you&lt;br/&gt;/Kalle&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Sat, Jun 6, 2015 at 4:35 PM, Kalle Rosenbaum &amp;lt;kalle at rosenbaum.se&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Hi&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Following earlier posts on Proof of Payment I&amp;#39;m now proposing the&lt;br/&gt;&amp;gt;&amp;gt; following BIP (To read it formatted instead, go to&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/kallerosenbaum/poppoc/wiki/Proof-of-Payment-BIP&#34;&gt;https://github.com/kallerosenbaum/poppoc/wiki/Proof-of-Payment-BIP&lt;/a&gt;).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Regards,&lt;br/&gt;&amp;gt;&amp;gt; Kalle Rosenbaum&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;pre&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;   BIP: &amp;lt;BIP number&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;   Title: Proof of Payment&lt;br/&gt;&amp;gt;&amp;gt;   Author: Kalle Rosenbaum &amp;lt;kalle at rosenbaum.se&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;   Status: Draft&lt;br/&gt;&amp;gt;&amp;gt;   Type: Standards Track&lt;br/&gt;&amp;gt;&amp;gt;   Created: &amp;lt;date created on, in ISO 8601 (yyyy-mm-dd) format&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;/pre&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; == Abstract ==&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; This BIP describes how a wallet can prove to a server that it has the&lt;br/&gt;&amp;gt;&amp;gt; ability to sign a certain transaction.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; == Motivation ==&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; There are several scenarios in which it would be useful to prove that you&lt;br/&gt;&amp;gt;&amp;gt; have paid for something. For example:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * A pre-paid hotel room where your PoP functions as a key to the door.&lt;br/&gt;&amp;gt;&amp;gt; * An online video rental service where you pay for a video and watch it on&lt;br/&gt;&amp;gt;&amp;gt; any device.&lt;br/&gt;&amp;gt;&amp;gt; * An ad-sign where you pay in advance for e.g. 2 weeks exclusivity. During&lt;br/&gt;&amp;gt;&amp;gt; this period you can upload new content to the sign whenever you like using&lt;br/&gt;&amp;gt;&amp;gt; PoP.&lt;br/&gt;&amp;gt;&amp;gt; * Log in to a pay site using a PoP.&lt;br/&gt;&amp;gt;&amp;gt; * A parking lot you pay for monthly and the car authenticates itself using&lt;br/&gt;&amp;gt;&amp;gt; PoP.&lt;br/&gt;&amp;gt;&amp;gt; * A lottery where all participants pay to the same address, and the winner&lt;br/&gt;&amp;gt;&amp;gt; is selected among the transactions to that address. You exchange the prize&lt;br/&gt;&amp;gt;&amp;gt; for a PoP for the winning transaction.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; With Proof of Payment, these use cases can be achieved without any&lt;br/&gt;&amp;gt;&amp;gt; personal information (user name, password, e-mail address, etc) being&lt;br/&gt;&amp;gt;&amp;gt; involved.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; == Rationale ==&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Desirable properties:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; # A PoP should be generated on demand.&lt;br/&gt;&amp;gt;&amp;gt; # It should only be usable once to avoid issues due to theft.&lt;br/&gt;&amp;gt;&amp;gt; # It should be able to create a PoP for any payment, regardless of script&lt;br/&gt;&amp;gt;&amp;gt; type (P2SH, P2PKH, etc.).&lt;br/&gt;&amp;gt;&amp;gt; # It should prove that you have enough credentials to unlock all the&lt;br/&gt;&amp;gt;&amp;gt; inputs of the proven transaction.&lt;br/&gt;&amp;gt;&amp;gt; # It should be easy to implement by wallets and servers to ease adoption.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Current methods of proving a payment:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * In BIP0070, the PaymentRequest together with the transactions fulfilling&lt;br/&gt;&amp;gt;&amp;gt; the request makes some sort of proof. However, it does not meet 1, 2 or 4&lt;br/&gt;&amp;gt;&amp;gt; and it obviously only meets 3 if the payment is made through BIP0070. Also,&lt;br/&gt;&amp;gt;&amp;gt; there&amp;#39;s no standard way to request/provide the proof. If standardized it&lt;br/&gt;&amp;gt;&amp;gt; would probably meet 5.&lt;br/&gt;&amp;gt;&amp;gt; * Signing messages, chosen by the server, with the private keys used to&lt;br/&gt;&amp;gt;&amp;gt; sign the transaction. This could meet 1 and 2 but probably not 3. This is&lt;br/&gt;&amp;gt;&amp;gt; not standardized either. 4 Could be met if designed so.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; If the script type is P2SH, any satisfying script should do, just like for&lt;br/&gt;&amp;gt;&amp;gt; a payment. For M-of-N multisig scripts, that would mean that any set of M&lt;br/&gt;&amp;gt;&amp;gt; keys should be sufficient, not neccesarily the same set of M keys that&lt;br/&gt;&amp;gt;&amp;gt; signed the transaction. This is important because strictly demanding the&lt;br/&gt;&amp;gt;&amp;gt; same set of M keys would undermine the purpose of a multisig address.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; == Specification ==&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; === Data structure ===&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; A proof of payment for a transaction T, here called PoP(T), is used to&lt;br/&gt;&amp;gt;&amp;gt; prove that one has ownership of the credentials needed to unlock all the&lt;br/&gt;&amp;gt;&amp;gt; inputs of T. It has the exact same structure as a bitcoin transaction with&lt;br/&gt;&amp;gt;&amp;gt; the same inputs and outputs as T and in the same order as in T. There is&lt;br/&gt;&amp;gt;&amp;gt; also one OP_RETURN output inserted at index 0, here called the pop output.&lt;br/&gt;&amp;gt;&amp;gt; This output must have the following format:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;  OP_RETURN &amp;lt;version&amp;gt; &amp;lt;txid&amp;gt; &amp;lt;nonce&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; {|&lt;br/&gt;&amp;gt;&amp;gt; ! Field        !! Size [B] !! Description&lt;br/&gt;&amp;gt;&amp;gt; |-&lt;br/&gt;&amp;gt;&amp;gt; | &amp;amp;lt;version&amp;gt; || 2        || Version, little endian, currently 0x01 0x00&lt;br/&gt;&amp;gt;&amp;gt; |-&lt;br/&gt;&amp;gt;&amp;gt; | &amp;amp;lt;txid&amp;gt;    || 32       || The transaction to prove&lt;br/&gt;&amp;gt;&amp;gt; |-&lt;br/&gt;&amp;gt;&amp;gt; | &amp;amp;lt;nonce&amp;gt;   || 6        || Random data&lt;br/&gt;&amp;gt;&amp;gt; |}&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The value of the pop output is set to the same value as the transaction&lt;br/&gt;&amp;gt;&amp;gt; fee of T. Also, if the outputs of T contains an OP_RETURN output, that&lt;br/&gt;&amp;gt;&amp;gt; output must not be included in the PoP because there can only be one&lt;br/&gt;&amp;gt;&amp;gt; OP_RETURN output in a transaction. The value of that OP_RETURN output is&lt;br/&gt;&amp;gt;&amp;gt; instead added to the value of the pop output.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; An illustration of the PoP data structure and its original payment is&lt;br/&gt;&amp;gt;&amp;gt; shown below.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;pre&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;   T&lt;br/&gt;&amp;gt;&amp;gt;  &#43;----------------------------------------------&#43;&lt;br/&gt;&amp;gt;&amp;gt;  |inputs       | outputs                        |&lt;br/&gt;&amp;gt;&amp;gt;  |       Value | Value   Script                 |&lt;br/&gt;&amp;gt;&amp;gt;  &#43;----------------------------------------------&#43;&lt;br/&gt;&amp;gt;&amp;gt;  |input0 1     |     0   pay to A               |&lt;br/&gt;&amp;gt;&amp;gt;  |input1 3     |     2   OP_RETURN &amp;lt;some data&amp;gt;  |&lt;br/&gt;&amp;gt;&amp;gt;  |input2 4     |     1   pay to B               |&lt;br/&gt;&amp;gt;&amp;gt;  |             |     4   pay to C               |&lt;br/&gt;&amp;gt;&amp;gt;  &#43;----------------------------------------------&#43;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;   PoP(T)&lt;br/&gt;&amp;gt;&amp;gt;  &#43;----------------------------------------------------------&#43;&lt;br/&gt;&amp;gt;&amp;gt;  |inputs       | outputs                                    |&lt;br/&gt;&amp;gt;&amp;gt;  |       Value | Value   Script                             |&lt;br/&gt;&amp;gt;&amp;gt;  &#43;----------------------------------------------------------&#43;&lt;br/&gt;&amp;gt;&amp;gt;  |input0 1     |     3   OP_RETURN &amp;lt;version&amp;gt; &amp;lt;txid&amp;gt; &amp;lt;nonce&amp;gt; |&lt;br/&gt;&amp;gt;&amp;gt;  |input1 3     |     0   pay to A                           |&lt;br/&gt;&amp;gt;&amp;gt;  |input2 4     |     1   pay to B                           |&lt;br/&gt;&amp;gt;&amp;gt;  |             |     4   pay to C                           |&lt;br/&gt;&amp;gt;&amp;gt;  &#43;----------------------------------------------------------&#43;&lt;br/&gt;&amp;gt;&amp;gt; &amp;lt;/pre&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The PoP is signed using the same signing process that is used for bitcoin&lt;br/&gt;&amp;gt;&amp;gt; transactions.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The purpose of the nonce is to make it harder to use a stolen PoP; Once&lt;br/&gt;&amp;gt;&amp;gt; the PoP has reached the server, that PoP is useless since the server will&lt;br/&gt;&amp;gt;&amp;gt; generate a new nonce for every PoP request.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Since a PoP is indistinguishable from a bitcoin transaction, there is a&lt;br/&gt;&amp;gt;&amp;gt; risk that it, accidently or maliciously, enters the bitcoin p2p network. If&lt;br/&gt;&amp;gt;&amp;gt; T is still unconfirmed, or if a reorg takes place, chances are that PoP(T)&lt;br/&gt;&amp;gt;&amp;gt; ends up in a block, invalidating T. Therefore it is important that the&lt;br/&gt;&amp;gt;&amp;gt; outputs of the PoP are the same as in T. The zero transaction fee in PoP(T)&lt;br/&gt;&amp;gt;&amp;gt; is to minimize the incentives for miners to select PoP(T) for inclusion.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; === Process ===&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; # A proof of payment request is sent from the server to the wallet. The&lt;br/&gt;&amp;gt;&amp;gt; PoP request contains:&lt;br/&gt;&amp;gt;&amp;gt; ## a random nonce&lt;br/&gt;&amp;gt;&amp;gt; ## a destination where to send the PoP, for example a https URL&lt;br/&gt;&amp;gt;&amp;gt; ## data hinting the wallet which transaction to create a proof for. For&lt;br/&gt;&amp;gt;&amp;gt; example:&lt;br/&gt;&amp;gt;&amp;gt; ##* txid, if known by the server&lt;br/&gt;&amp;gt;&amp;gt; ##* PaymentRequest.PaymentDetails.merchant_data (in case of a BIP0070&lt;br/&gt;&amp;gt;&amp;gt; payment)&lt;br/&gt;&amp;gt;&amp;gt; ##* amount, label, message or other information from a BIP0021 URL&lt;br/&gt;&amp;gt;&amp;gt; # The wallet identifies a transaction T, if possible. Otherwise it asks&lt;br/&gt;&amp;gt;&amp;gt; the user to select among the ones that match the hints in 1.iii.&lt;br/&gt;&amp;gt;&amp;gt; # The wallet creates an unsigned PoP (UPoP) for T, and asks the user to&lt;br/&gt;&amp;gt;&amp;gt; sign it.&lt;br/&gt;&amp;gt;&amp;gt; # The user confirms&lt;br/&gt;&amp;gt;&amp;gt; # The UPoP(T) is signed by the wallet, creating PoP(T).&lt;br/&gt;&amp;gt;&amp;gt; # The PoP is sent to the destination in 1.ii.&lt;br/&gt;&amp;gt;&amp;gt; # The server receiving the PoP validates it and responds with “valid” or&lt;br/&gt;&amp;gt;&amp;gt; “invalid”.&lt;br/&gt;&amp;gt;&amp;gt; # The wallet displays the response in some way to the user.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; &amp;#39;&amp;#39;&amp;#39;Remarks:&amp;#39;&amp;#39;&amp;#39;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * The method of transferring the PoP request at step 1 is not specified&lt;br/&gt;&amp;gt;&amp;gt; here. Instead that is specified in separate specifications. See [btcpop&lt;br/&gt;&amp;gt;&amp;gt; scheme BIP](btcpop scheme BIP).&lt;br/&gt;&amp;gt;&amp;gt; * The nonce must be randomly generated by the server for every new PoP&lt;br/&gt;&amp;gt;&amp;gt; request.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; === Validating a PoP ===&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The server needs to validate the PoP and reply with &amp;#34;valid&amp;#34; or &amp;#34;invalid&amp;#34;.&lt;br/&gt;&amp;gt;&amp;gt; That process is outlined below. If any step fails, the validation is aborted&lt;br/&gt;&amp;gt;&amp;gt; and &amp;#34;invalid&amp;#34; is returned:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; # Check the format of the PoP. It must pass normal transaction checks,&lt;br/&gt;&amp;gt;&amp;gt; except that the inputs may already be spent.&lt;br/&gt;&amp;gt;&amp;gt; # Check the PoP output at index 0. It must conform to the OP_RETURN output&lt;br/&gt;&amp;gt;&amp;gt; format outlined above.&lt;br/&gt;&amp;gt;&amp;gt; # Check that the rest of the outputs exactly corresponds to the outputs of&lt;br/&gt;&amp;gt;&amp;gt; T and that they appear in the same order as in T. An exception to this is&lt;br/&gt;&amp;gt;&amp;gt; that any OP_RETURN outputs of T must not be included in the PoP. All output&lt;br/&gt;&amp;gt;&amp;gt; value from the OP_RETURN must instead be included in the PoP output.&lt;br/&gt;&amp;gt;&amp;gt; # Check that the nonce is the same as the one you requested.&lt;br/&gt;&amp;gt;&amp;gt; # Check that the inputs of the PoP are exactly the same as in transaction&lt;br/&gt;&amp;gt;&amp;gt; T, and in the same order.&lt;br/&gt;&amp;gt;&amp;gt; # Check the scripts of all the inputs, as would be done on a normal&lt;br/&gt;&amp;gt;&amp;gt; transaction.&lt;br/&gt;&amp;gt;&amp;gt; # Check that the txid in the PoP output is the transaction you actually&lt;br/&gt;&amp;gt;&amp;gt; want proof for. If you don’t know exactly what transaction you want proof&lt;br/&gt;&amp;gt;&amp;gt; for, check that the transaction actually pays for the product/service you&lt;br/&gt;&amp;gt;&amp;gt; deliver.&lt;br/&gt;&amp;gt;&amp;gt; # Return &amp;#34;valid&amp;#34;.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; == Security considerations ==&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; * Someone can intercept the PoP-request and change the PoP destination so&lt;br/&gt;&amp;gt;&amp;gt; that the user sends the PoP to the bad actor.&lt;br/&gt;&amp;gt;&amp;gt; * Someone can intercept the PoP-request and change for example the txid to&lt;br/&gt;&amp;gt;&amp;gt; trick the user to sign a PoP for another transaction than the intended. This&lt;br/&gt;&amp;gt;&amp;gt; can of course be avoided if the user is actually looking at the UPoP before&lt;br/&gt;&amp;gt;&amp;gt; signing it. The bad actor could also set hints for a transaction, existing&lt;br/&gt;&amp;gt;&amp;gt; or not, that the user didn’t make, resulting in a broken service.&lt;br/&gt;&amp;gt;&amp;gt; * Someone can steal a PoP and try to use the service hoping to get a&lt;br/&gt;&amp;gt;&amp;gt; matching nonce. Probability per try: 1/(2^48). The server should have a&lt;br/&gt;&amp;gt;&amp;gt; mechanism for detecting a brute force attack of this kind, or at least slow&lt;br/&gt;&amp;gt;&amp;gt; down the process by delaying the PoP request by some 100 ms or so.&lt;br/&gt;&amp;gt;&amp;gt; * Even if a wallet has no funds it might still be valuable as a generator&lt;br/&gt;&amp;gt;&amp;gt; for PoPs. This makes it important to keep the security of the wallet after&lt;br/&gt;&amp;gt;&amp;gt; it has been emptied.&lt;br/&gt;&amp;gt;&amp;gt; * Transaction malleability may cause the server to have another&lt;br/&gt;&amp;gt;&amp;gt; transaction id than the wallet for the payment. In that case the wallet will&lt;br/&gt;&amp;gt;&amp;gt; not be able to prove the transaction for the server. Wallets should not rely&lt;br/&gt;&amp;gt;&amp;gt; on the transaction id of the outgoing transaction. Instead it should listen&lt;br/&gt;&amp;gt;&amp;gt; for the transaction on the network and put that in its list of transactions.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The first two issues are the same attack vector as for traditional, ie&lt;br/&gt;&amp;gt;&amp;gt; BIP0021, bitcoin payments. They could be mitigated by using secure&lt;br/&gt;&amp;gt;&amp;gt; connections.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; == Reference implementation ==&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; [&lt;a href=&#34;https://github.com/kallerosenbaum/poppoc&#34;&gt;https://github.com/kallerosenbaum/poppoc&lt;/a&gt; poppoc on GitHub]&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; [&lt;a href=&#34;https://github.com/kallerosenbaum/wallet&#34;&gt;https://github.com/kallerosenbaum/wallet&lt;/a&gt; Mycelium fork on GitHub]&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; == References ==&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; [&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki&lt;/a&gt; BIP0021]:&lt;br/&gt;&amp;gt;&amp;gt; URI Scheme&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; [&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki&lt;/a&gt; BIP0070]:&lt;br/&gt;&amp;gt;&amp;gt; Payment Protocol&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; [[btcpop scheme BIP]]&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; ------------------------------------------------------------------------------&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt; Bitcoin-development mailing list&lt;br/&gt;&amp;gt;&amp;gt; Bitcoin-development at lists.sourceforge.net&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.sourceforge.net/lists/listinfo/bitcoin-development&#34;&gt;https://lists.sourceforge.net/lists/listinfo/bitcoin-development&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;
    </content>
    <updated>2023-06-07T15:36:48Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsq0rnsmswqd6xe5rascj4ehf052ml9dwcfjwhd7s7rcsvc6h4v3zgzyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2sfz6w3</id>
    
      <title type="html">📅 Original date posted:2015-06-06 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsq0rnsmswqd6xe5rascj4ehf052ml9dwcfjwhd7s7rcsvc6h4v3zgzyr3em88rkrkeewch229jtw6txw7wu3j5wmjyafvcp7m0y6fmj74e2sfz6w3" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswzanxq2aq7emgxxdptq73r7uym5tc97neku6aj600zdpwvj8arksfxq2j6&#39;&gt;nevent1q…q2j6&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-06-06&lt;br/&gt;📝 Original message:Hi&lt;br/&gt;&lt;br/&gt;Following earlier posts on Proof of Payment I&amp;#39;m now proposing the following&lt;br/&gt;BIP (To read it formatted instead, go to&lt;br/&gt;&lt;a href=&#34;https://github.com/kallerosenbaum/poppoc/wiki/Proof-of-Payment-BIP&#34;&gt;https://github.com/kallerosenbaum/poppoc/wiki/Proof-of-Payment-BIP&lt;/a&gt;).&lt;br/&gt;&lt;br/&gt;Regards,&lt;br/&gt;Kalle Rosenbaum&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;  BIP: &amp;lt;BIP number&amp;gt;&lt;br/&gt;  Title: Proof of Payment&lt;br/&gt;  Author: Kalle Rosenbaum &amp;lt;kalle at rosenbaum.se&amp;gt;&lt;br/&gt;  Status: Draft&lt;br/&gt;  Type: Standards Track&lt;br/&gt;  Created: &amp;lt;date created on, in ISO 8601 (yyyy-mm-dd) format&amp;gt;&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;== Abstract ==&lt;br/&gt;&lt;br/&gt;This BIP describes how a wallet can prove to a server that it has the&lt;br/&gt;ability to sign a certain transaction.&lt;br/&gt;&lt;br/&gt;== Motivation ==&lt;br/&gt;&lt;br/&gt;There are several scenarios in which it would be useful to prove that you&lt;br/&gt;have paid for something. For example:&lt;br/&gt;&lt;br/&gt;* A pre-paid hotel room where your PoP functions as a key to the door.&lt;br/&gt;* An online video rental service where you pay for a video and watch it on&lt;br/&gt;any device.&lt;br/&gt;* An ad-sign where you pay in advance for e.g. 2 weeks exclusivity. During&lt;br/&gt;this period you can upload new content to the sign whenever you like using&lt;br/&gt;PoP.&lt;br/&gt;* Log in to a pay site using a PoP.&lt;br/&gt;* A parking lot you pay for monthly and the car authenticates itself using&lt;br/&gt;PoP.&lt;br/&gt;* A lottery where all participants pay to the same address, and the winner&lt;br/&gt;is selected among the transactions to that address. You exchange the prize&lt;br/&gt;for a PoP for the winning transaction.&lt;br/&gt;&lt;br/&gt;With Proof of Payment, these use cases can be achieved without any personal&lt;br/&gt;information (user name, password, e-mail address, etc) being involved.&lt;br/&gt;&lt;br/&gt;== Rationale ==&lt;br/&gt;&lt;br/&gt;Desirable properties:&lt;br/&gt;&lt;br/&gt;# A PoP should be generated on demand.&lt;br/&gt;# It should only be usable once to avoid issues due to theft.&lt;br/&gt;# It should be able to create a PoP for any payment, regardless of script&lt;br/&gt;type (P2SH, P2PKH, etc.).&lt;br/&gt;# It should prove that you have enough credentials to unlock all the inputs&lt;br/&gt;of the proven transaction.&lt;br/&gt;# It should be easy to implement by wallets and servers to ease adoption.&lt;br/&gt;&lt;br/&gt;Current methods of proving a payment:&lt;br/&gt;&lt;br/&gt;* In BIP0070, the PaymentRequest together with the transactions fulfilling&lt;br/&gt;the request makes some sort of proof. However, it does not meet 1, 2 or 4&lt;br/&gt;and it obviously only meets 3 if the payment is made through BIP0070. Also,&lt;br/&gt;there&amp;#39;s no standard way to request/provide the proof. If standardized it&lt;br/&gt;would probably meet 5.&lt;br/&gt;* Signing messages, chosen by the server, with the private keys used to&lt;br/&gt;sign the transaction. This could meet 1 and 2 but probably not 3. This is&lt;br/&gt;not standardized either. 4 Could be met if designed so.&lt;br/&gt;&lt;br/&gt;If the script type is P2SH, any satisfying script should do, just like for&lt;br/&gt;a payment. For M-of-N multisig scripts, that would mean that any set of M&lt;br/&gt;keys should be sufficient, not neccesarily the same set of M keys that&lt;br/&gt;signed the transaction. This is important because strictly demanding the&lt;br/&gt;same set of M keys would undermine the purpose of a multisig address.&lt;br/&gt;&lt;br/&gt;== Specification ==&lt;br/&gt;&lt;br/&gt;=== Data structure ===&lt;br/&gt;&lt;br/&gt;A proof of payment for a transaction T, here called PoP(T), is used to&lt;br/&gt;prove that one has ownership of the credentials needed to unlock all the&lt;br/&gt;inputs of T. It has the exact same structure as a bitcoin transaction with&lt;br/&gt;the same inputs and outputs as T and in the same order as in T. There is&lt;br/&gt;also one OP_RETURN output inserted at index 0, here called the pop output.&lt;br/&gt;This output must have the following format:&lt;br/&gt;&lt;br/&gt; OP_RETURN &amp;lt;version&amp;gt; &amp;lt;txid&amp;gt; &amp;lt;nonce&amp;gt;&lt;br/&gt;&lt;br/&gt;{|&lt;br/&gt;! Field        !! Size [B] !! Description&lt;br/&gt;|-&lt;br/&gt;| &amp;amp;lt;version&amp;gt; || 2        || Version, little endian, currently 0x01 0x00&lt;br/&gt;|-&lt;br/&gt;| &amp;amp;lt;txid&amp;gt;    || 32       || The transaction to prove&lt;br/&gt;|-&lt;br/&gt;| &amp;amp;lt;nonce&amp;gt;   || 6        || Random data&lt;br/&gt;|}&lt;br/&gt;&lt;br/&gt;The value of the pop output is set to the same value as the transaction fee&lt;br/&gt;of T. Also, if the outputs of T contains an OP_RETURN output, that output&lt;br/&gt;must not be included in the PoP because there can only be one OP_RETURN&lt;br/&gt;output in a transaction. The value of that OP_RETURN output is instead&lt;br/&gt;added to the value of the pop output.&lt;br/&gt;&lt;br/&gt;An illustration of the PoP data structure and its original payment is shown&lt;br/&gt;below.&lt;br/&gt;&lt;br/&gt;&amp;lt;pre&amp;gt;&lt;br/&gt;  T&lt;br/&gt; &#43;----------------------------------------------&#43;&lt;br/&gt; |inputs       | outputs                        |&lt;br/&gt; |       Value | Value   Script                 |&lt;br/&gt; &#43;----------------------------------------------&#43;&lt;br/&gt; |input0 1     |     0   pay to A               |&lt;br/&gt; |input1 3     |     2   OP_RETURN &amp;lt;some data&amp;gt;  |&lt;br/&gt; |input2 4     |     1   pay to B               |&lt;br/&gt; |             |     4   pay to C               |&lt;br/&gt; &#43;----------------------------------------------&#43;&lt;br/&gt;&lt;br/&gt;  PoP(T)&lt;br/&gt; &#43;----------------------------------------------------------&#43;&lt;br/&gt; |inputs       | outputs                                    |&lt;br/&gt; |       Value | Value   Script                             |&lt;br/&gt; &#43;----------------------------------------------------------&#43;&lt;br/&gt; |input0 1     |     3   OP_RETURN &amp;lt;version&amp;gt; &amp;lt;txid&amp;gt; &amp;lt;nonce&amp;gt; |&lt;br/&gt; |input1 3     |     0   pay to A                           |&lt;br/&gt; |input2 4     |     1   pay to B                           |&lt;br/&gt; |             |     4   pay to C                           |&lt;br/&gt; &#43;----------------------------------------------------------&#43;&lt;br/&gt;&amp;lt;/pre&amp;gt;&lt;br/&gt;&lt;br/&gt;The PoP is signed using the same signing process that is used for bitcoin&lt;br/&gt;transactions.&lt;br/&gt;&lt;br/&gt;The purpose of the nonce is to make it harder to use a stolen PoP; Once the&lt;br/&gt;PoP has reached the server, that PoP is useless since the server will&lt;br/&gt;generate a new nonce for every PoP request.&lt;br/&gt;&lt;br/&gt;Since a PoP is indistinguishable from a bitcoin transaction, there is a&lt;br/&gt;risk that it, accidently or maliciously, enters the bitcoin p2p network. If&lt;br/&gt;T is still unconfirmed, or if a reorg takes place, chances are that PoP(T)&lt;br/&gt;ends up in a block, invalidating T. Therefore it is important that the&lt;br/&gt;outputs of the PoP are the same as in T. The zero transaction fee in PoP(T)&lt;br/&gt;is to minimize the incentives for miners to select PoP(T) for inclusion.&lt;br/&gt;&lt;br/&gt;=== Process ===&lt;br/&gt;&lt;br/&gt;# A proof of payment request is sent from the server to the wallet. The PoP&lt;br/&gt;request contains:&lt;br/&gt;## a random nonce&lt;br/&gt;## a destination where to send the PoP, for example a https URL&lt;br/&gt;## data hinting the wallet which transaction to create a proof for. For&lt;br/&gt;example:&lt;br/&gt;##* txid, if known by the server&lt;br/&gt;##* PaymentRequest.PaymentDetails.merchant_data (in case of a BIP0070&lt;br/&gt;payment)&lt;br/&gt;##* amount, label, message or other information from a BIP0021 URL&lt;br/&gt;# The wallet identifies a transaction T, if possible. Otherwise it asks the&lt;br/&gt;user to select among the ones that match the hints in 1.iii.&lt;br/&gt;# The wallet creates an unsigned PoP (UPoP) for T, and asks the user to&lt;br/&gt;sign it.&lt;br/&gt;# The user confirms&lt;br/&gt;# The UPoP(T) is signed by the wallet, creating PoP(T).&lt;br/&gt;# The PoP is sent to the destination in 1.ii.&lt;br/&gt;# The server receiving the PoP validates it and responds with “valid” or&lt;br/&gt;“invalid”.&lt;br/&gt;# The wallet displays the response in some way to the user.&lt;br/&gt;&lt;br/&gt;&amp;#39;&amp;#39;&amp;#39;Remarks:&amp;#39;&amp;#39;&amp;#39;&lt;br/&gt;&lt;br/&gt;* The method of transferring the PoP request at step 1 is not specified&lt;br/&gt;here. Instead that is specified in separate specifications. See [btcpop&lt;br/&gt;scheme BIP](btcpop scheme BIP).&lt;br/&gt;* The nonce must be randomly generated by the server for every new PoP&lt;br/&gt;request.&lt;br/&gt;&lt;br/&gt;=== Validating a PoP ===&lt;br/&gt;&lt;br/&gt;The server needs to validate the PoP and reply with &amp;#34;valid&amp;#34; or &amp;#34;invalid&amp;#34;.&lt;br/&gt;That process is outlined below. If any step fails, the validation is&lt;br/&gt;aborted and &amp;#34;invalid&amp;#34; is returned:&lt;br/&gt;&lt;br/&gt;# Check the format of the PoP. It must pass normal transaction checks,&lt;br/&gt;except that the inputs may already be spent.&lt;br/&gt;# Check the PoP output at index 0. It must conform to the OP_RETURN output&lt;br/&gt;format outlined above.&lt;br/&gt;# Check that the rest of the outputs exactly corresponds to the outputs of&lt;br/&gt;T and that they appear in the same order as in T. An exception to this is&lt;br/&gt;that any OP_RETURN outputs of T must not be included in the PoP. All output&lt;br/&gt;value from the OP_RETURN must instead be included in the PoP output.&lt;br/&gt;# Check that the nonce is the same as the one you requested.&lt;br/&gt;# Check that the inputs of the PoP are exactly the same as in transaction&lt;br/&gt;T, and in the same order.&lt;br/&gt;# Check the scripts of all the inputs, as would be done on a normal&lt;br/&gt;transaction.&lt;br/&gt;# Check that the txid in the PoP output is the transaction you actually&lt;br/&gt;want proof for. If you don’t know exactly what transaction you want proof&lt;br/&gt;for, check that the transaction actually pays for the product/service you&lt;br/&gt;deliver.&lt;br/&gt;# Return &amp;#34;valid&amp;#34;.&lt;br/&gt;&lt;br/&gt;== Security considerations ==&lt;br/&gt;&lt;br/&gt;* Someone can intercept the PoP-request and change the PoP destination so&lt;br/&gt;that the user sends the PoP to the bad actor.&lt;br/&gt;* Someone can intercept the PoP-request and change for example the txid to&lt;br/&gt;trick the user to sign a PoP for another transaction than the intended.&lt;br/&gt;This can of course be avoided if the user is actually looking at the UPoP&lt;br/&gt;before signing it. The bad actor could also set hints for a transaction,&lt;br/&gt;existing or not, that the user didn’t make, resulting in a broken service.&lt;br/&gt;* Someone can steal a PoP and try to use the service hoping to get a&lt;br/&gt;matching nonce. Probability per try: 1/(2^48). The server should have a&lt;br/&gt;mechanism for detecting a brute force attack of this kind, or at least slow&lt;br/&gt;down the process by delaying the PoP request by some 100 ms or so.&lt;br/&gt;* Even if a wallet has no funds it might still be valuable as a generator&lt;br/&gt;for PoPs. This makes it important to keep the security of the wallet after&lt;br/&gt;it has been emptied.&lt;br/&gt;* Transaction malleability may cause the server to have another transaction&lt;br/&gt;id than the wallet for the payment. In that case the wallet will not be&lt;br/&gt;able to prove the transaction for the server. Wallets should not rely on&lt;br/&gt;the transaction id of the outgoing transaction. Instead it should listen&lt;br/&gt;for the transaction on the network and put that in its list of transactions.&lt;br/&gt;&lt;br/&gt;The first two issues are the same attack vector as for traditional, ie&lt;br/&gt;BIP0021, bitcoin payments. They could be mitigated by using secure&lt;br/&gt;connections.&lt;br/&gt;&lt;br/&gt;== Reference implementation ==&lt;br/&gt;&lt;br/&gt;[&lt;a href=&#34;https://github.com/kallerosenbaum/poppoc&#34;&gt;https://github.com/kallerosenbaum/poppoc&lt;/a&gt; poppoc on GitHub]&lt;br/&gt;&lt;br/&gt;[&lt;a href=&#34;https://github.com/kallerosenbaum/wallet&#34;&gt;https://github.com/kallerosenbaum/wallet&lt;/a&gt; Mycelium fork on GitHub]&lt;br/&gt;&lt;br/&gt;== References ==&lt;br/&gt;&lt;br/&gt;[&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0021.mediawiki&lt;/a&gt; BIP0021]:&lt;br/&gt;URI Scheme&lt;br/&gt;&lt;br/&gt;[&lt;a href=&#34;https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki&#34;&gt;https://github.com/bitcoin/bips/blob/master/bip-0070.mediawiki&lt;/a&gt; BIP0070]:&lt;br/&gt;Payment Protocol&lt;br/&gt;&lt;br/&gt;[[btcpop scheme BIP]]&lt;br/&gt;-------------- next part --------------&lt;br/&gt;An HTML attachment was scrubbed...&lt;br/&gt;URL: &amp;lt;&lt;a href=&#34;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150606/3aae1db3/attachment.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20150606/3aae1db3/attachment.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T15:36:46Z</updated>
  </entry>

</feed>