<?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/npub1lt764949f8haagp5vydhc3uhh3ghfg64qu3fuydky35ynxwrnvnsess5w7.rss" />
  <link href="https://nostr.ae/npub1lt764949f8haagp5vydhc3uhh3ghfg64qu3fuydky35ynxwrnvnsess5w7" />
  <id>https://nostr.ae/npub1lt764949f8haagp5vydhc3uhh3ghfg64qu3fuydky35ynxwrnvnsess5w7</id>
  <icon></icon>
  <logo></logo>




  <entry>
    <id>https://nostr.ae/nevent1qqs8zdgsdfu7y898pmnqutdjlt2aw3prs6hfs5ral82l4h2msurnksszyra0m25k54y7lh4qx3s3klz8j779za9r25rj98s3kcjxsjvecwdjw2xup0c</id>
    
      <title type="html">📅 Original date posted:2015-11-19 📝 Original message: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqs8zdgsdfu7y898pmnqutdjlt2aw3prs6hfs5ral82l4h2msurnksszyra0m25k54y7lh4qx3s3klz8j779za9r25rj98s3kcjxsjvecwdjw2xup0c" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsv7qp7erm3y0s8kqvygdl9ahs2vvjfu9fzcw9q69zf3fth894ksvcqhmjdh&#39;&gt;nevent1q…mjdh&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2015-11-19&lt;br/&gt;📝 Original message:&lt;br/&gt;sighhash_noinput is the miner chooses which which utxo is consumed assuming&lt;br/&gt;there are multiple candidates variant of the idea?&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;On Thu, Nov 19, 2015 at 11:12 AM, Tadge Dryja &amp;lt;tadge at lightning.network&amp;gt;&lt;br/&gt;wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; I&amp;#39;ve joked that BIP62 is the &amp;#34;whack-a-mole&amp;#34; BIP in that it addresses many&lt;br/&gt;&amp;gt; vectors for txid malleability, but maybe there are more.  And more&lt;br/&gt;&amp;gt; importantly, it addresses 3rd party malleability.  It&amp;#39;s not helpful in the&lt;br/&gt;&amp;gt; context of lightning channel creation because ECDSA sigs are inherently&lt;br/&gt;&amp;gt; malleable.  You can always re-sign the same message with a different&lt;br/&gt;&amp;gt; k-value and get a different signature.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The functionality that&amp;#39;s needed is to be able to reliably spend from&lt;br/&gt;&amp;gt; unconfirmed transactions.  Segregated witness can accomplish that, but it&lt;br/&gt;&amp;gt; quite a large hard-fork change.  sighash_noinput can also accomplish that:&lt;br/&gt;&amp;gt; as input txids are not signed, if they change, the spending transaction can&lt;br/&gt;&amp;gt; be modified while leaving counterparty signatures intact.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;m hoping to start a new &amp;#34;testnet-L&amp;#34; similar to testnet3, with this&lt;br/&gt;&amp;gt; sighash type so that we can test malleability mitigation out.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (Oh also, hi mailing list, sorry I have not posted till now!  But I will&lt;br/&gt;&amp;gt; start posting!)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; -Tadge&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; On Thu, Nov 19, 2015 at 9:56 AM, Mark Friedenbach &amp;lt;mark at friedenbach.org&amp;gt;&lt;br/&gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; The basic idea of the soft-fork plan is very simple --- have the&lt;br/&gt;&amp;gt;&amp;gt; scriptPubKey be just the 20-byte hash of the redeem script. The scriptSig&lt;br/&gt;&amp;gt;&amp;gt; of the spending input is empty. The actual scriptSig, with the redeem&lt;br/&gt;&amp;gt;&amp;gt; script and signatures, is contained in a separate Merkle tree committed to&lt;br/&gt;&amp;gt;&amp;gt; elsewhere in the block (e.g. in the last output of the coinbase, or the&lt;br/&gt;&amp;gt;&amp;gt; last output of the last transaction).&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; On Thu, Nov 19, 2015 at 7:31 AM, Greg Sanders &amp;lt;gsanders87 at gmail.com&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; wrote:&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; The hardfork variant is quite simple, if I understood it correctly. You&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; just stick the signatures in another parallel merkle tree. So if you don&amp;#39;t&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; want to validate signatures, just don&amp;#39;t download them, and validate&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; everything else. TXIDs don&amp;#39;t use the signature at all. Nothing to malleate,&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; AFAIK. Not sure what the softfork plan is, but it will be a talk at Scaling&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Bitcoin HK.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; On Thu, Nov 19, 2015 at 10:28 AM, Glenn Tarbox, PhD &amp;lt;glenn at tarbox.org&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; wrote:&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; On Thu, Nov 19, 2015 at 4:33 AM, sickpig at gmail.com &amp;lt;sickpig at gmail.com&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&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;&amp;gt; Hi Pierre&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; you could start here&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;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/ElementsProject/elementsproject.github.io#segregated-witness&#34;&gt;https://github.com/ElementsProject/elementsproject.github.io#segregated-witness&lt;/a&gt;&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; &lt;a href=&#34;https://people.xiph.org/~greg/blockstream.gmaxwell.elements.talk.060815.pdf&#34;&gt;https://people.xiph.org/~greg/blockstream.gmaxwell.elements.talk.060815.pdf&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://github.com/ElementsProject/elements&#34;&gt;https://github.com/ElementsProject/elements&lt;/a&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; There was a brief blip on Reddit:&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;a href=&#34;https://www.reddit.com/r/Bitcoin/comments/3ngtx5/could_the_segregated_witness_part_of_the/cwnthlh&#34;&gt;https://www.reddit.com/r/Bitcoin/comments/3ngtx5/could_the_segregated_witness_part_of_the/cwnthlh&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Its weird how little information there is on Segregated Witness.  I&amp;#39;m&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; guessing its a simple concept and those working on it (sipa / gmaxwell)&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; haven&amp;#39;t felt the need to write it up.&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; That it &amp;#34;apparently&amp;#34; can be done with a soft fork similar to P2SH is&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; good news... I guess...&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; Glenn H. Tarbox, PhD&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; Lightning-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&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;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&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;&amp;gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&lt;/a&gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; _______________________________________________&lt;br/&gt;&amp;gt; Lightning-dev mailing list&lt;br/&gt;&amp;gt; Lightning-dev at lists.linuxfoundation.org&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev&#34;&gt;https://lists.linuxfoundation.org/mailman/listinfo/lightning-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/lightning-dev/attachments/20151119/10a65b2f/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/lightning-dev/attachments/20151119/10a65b2f/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-09T12:45:09Z</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsf338cf8yqkjawt2pdfhllvh5anx4yt485xcwc0x8vehw38akhfyszyra0m25k54y7lh4qx3s3klz8j779za9r25rj98s3kcjxsjvecwdjwg8l0zg</id>
    
      <title type="html">📅 Original date posted:2016-06-20 📝 Original message:Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsf338cf8yqkjawt2pdfhllvh5anx4yt485xcwc0x8vehw38akhfyszyra0m25k54y7lh4qx3s3klz8j779za9r25rj98s3kcjxsjvecwdjwg8l0zg" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsd87k34a4mw4cunfj9cg4ld8pxrgtrwesppehg0zpcm6sv2t0hsfgg2tudq&#39;&gt;nevent1q…tudq&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2016-06-20&lt;br/&gt;📝 Original message:Hi Peter,&lt;br/&gt;&lt;br/&gt;I didn&amp;#39;t entirely understand the process of transaction linearization.&lt;br/&gt;&lt;br/&gt;What I see is a potential process where when the miner assembles the block,&lt;br/&gt;he strips all but one sigscript per tx. The selection of which  sigscript&lt;br/&gt;is retained is determined by the random oracle.  Is this is primary benefit&lt;br/&gt;you are suggesting?&lt;br/&gt;&lt;br/&gt;It appears to me that blocks still need to contain a list of full TX Input&lt;br/&gt;and Tx Outputs with your approach. Some of the description seems to&lt;br/&gt;indicate that there are opportunities to elide further data but it&amp;#39;s&lt;br/&gt;unclear to me how.&lt;br/&gt;&lt;br/&gt;On Mon, Jun 20, 2016 at 7:14 AM Police Terror via bitcoin-dev &amp;lt;&lt;br/&gt;bitcoin-dev at lists.linuxfoundation.org&amp;gt; wrote:&lt;br/&gt;&lt;br/&gt;&amp;gt; Bitcoin could embed a lisp interpreter such as Scheme, reverse engineer&lt;br/&gt;&amp;gt; the current protocol into lisp (inside C&#43;&#43;), run this alternative engine&lt;br/&gt;&amp;gt; alongside the current one as an option for some years (only for fine&lt;br/&gt;&amp;gt; tuning) then eventually fade this lisp written validation code instead&lt;br/&gt;&amp;gt; of the current one.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Scheme is small and minimal, and embeds easily in C&#43;&#43;. This could be a&lt;br/&gt;&amp;gt; better option than the libconsensus library - validation in a functional&lt;br/&gt;&amp;gt; scripting language.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; That doesn&amp;#39;t mean people can&amp;#39;t program the validation code in other&lt;br/&gt;&amp;gt; languages (maybe they&amp;#39;d want to optimize), but this code would be the&lt;br/&gt;&amp;gt; standard.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It&amp;#39;s really good how you are thinking deeply how Bitcoin can be used,&lt;br/&gt;&amp;gt; and the implications of everything. Also there&amp;#39;s a lot of magical utopic&lt;br/&gt;&amp;gt; thinking in Ethereum, which is transhumanist nonsense that is life&lt;br/&gt;&amp;gt; denying. Bitcoin really speaks to me because it is real and a great tool&lt;br/&gt;&amp;gt; following the UNIX principle.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I wouldn&amp;#39;t be so quick to deride good engineering over systematic&lt;br/&gt;&amp;gt; provable systems for all domains. Bitcoin being written in C&#43;&#43; is not a&lt;br/&gt;&amp;gt; defect. It&amp;#39;s actually a strong language for what it does. Especially&lt;br/&gt;&amp;gt; when used correctly (which is not often and takes years to master).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; With the seals idea- am I understand this correctly?: Every transaction&lt;br/&gt;&amp;gt; has a number (essentially the index starting from 0 upwards) depending&lt;br/&gt;&amp;gt; on where it is in the blockchain.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Then there is an array (probably an on disk array mapping transaction&lt;br/&gt;&amp;gt; indexes to hashes). Each hash entry in the array must be unique (the&lt;br/&gt;&amp;gt; hashes) otherwise the transaction will be denied. This is a great idea&lt;br/&gt;&amp;gt; to solve transaction hash collisions and simple to implement.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Probabilistic validation is a good idea, although the real difficulty&lt;br/&gt;&amp;gt; now seems to be writing and indexing all the blockchain data for&lt;br/&gt;&amp;gt; lookups. And validation is disabled for most of the blocks. Pruning is&lt;br/&gt;&amp;gt; only a stop gap measure (which loses data) that doesn&amp;#39;t solve the issue&lt;br/&gt;&amp;gt; of continually growing resource consumption. Hardware and implementation&lt;br/&gt;&amp;gt; can only mitigate this so much. If only there was a way to simplify the&lt;br/&gt;&amp;gt; underlying protocol to make it more resource efficient...&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Peter Todd via bitcoin-dev:&lt;br/&gt;&amp;gt; &amp;gt; In light of Ethereum&amp;#39;s recent problems with its imperative,&lt;br/&gt;&amp;gt; account-based,&lt;br/&gt;&amp;gt; &amp;gt; programming model, I thought I&amp;#39;d do a quick writeup outlining the&lt;br/&gt;&amp;gt; building&lt;br/&gt;&amp;gt; &amp;gt; blocks of the state-machine approach to so-called &amp;#34;smart contract&amp;#34;&lt;br/&gt;&amp;gt; systems, an&lt;br/&gt;&amp;gt; &amp;gt; extension of Bitcoin&amp;#39;s own design that I personally have been developing&lt;br/&gt;&amp;gt; for a&lt;br/&gt;&amp;gt; &amp;gt; number of years now as my Proofchains/Dex research work.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; # Deterministic Code / Deterministic Expressions&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; We need to be able to run code on different computers and get identical&lt;br/&gt;&amp;gt; &amp;gt; results; without this consensus is impossible and we might as well just&lt;br/&gt;&amp;gt; use a&lt;br/&gt;&amp;gt; &amp;gt; central authoritative database. Traditional languages and surrounding&lt;br/&gt;&amp;gt; &amp;gt; frameworks make determinism difficult to achieve, as they tend to be&lt;br/&gt;&amp;gt; filled&lt;br/&gt;&amp;gt; &amp;gt; with undefined and underspecified behavior, ranging from signed integer&lt;br/&gt;&amp;gt; &amp;gt; overflow in C/C&#43;&#43; to non-deterministic behavior in databases. While some&lt;br/&gt;&amp;gt; &amp;gt; successful systems like Bitcoin are based on such languages, their&lt;br/&gt;&amp;gt; success is&lt;br/&gt;&amp;gt; &amp;gt; attributable to heroic efforts by their developers.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Deterministic expression systems such as Bitcoin&amp;#39;s scripting system and&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; &amp;gt; author&amp;#39;s Dex project improve on this by allowing expressions to be&lt;br/&gt;&amp;gt; precisely&lt;br/&gt;&amp;gt; &amp;gt; specified by hash digest, and executed against an environment with&lt;br/&gt;&amp;gt; &amp;gt; deterministic results. In the case of Bitcoin&amp;#39;s script, the expression&lt;br/&gt;&amp;gt; is a&lt;br/&gt;&amp;gt; &amp;gt; Forth-like stack-based program; in Dex the expression takes the form of a&lt;br/&gt;&amp;gt; &amp;gt; lambda calculus expression.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ## Proofs&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; So far the most common use for deterministic expressions is to specify&lt;br/&gt;&amp;gt; &amp;gt; conditions upon which funds can be spent, as seen in Bitcoin&lt;br/&gt;&amp;gt; (particularly&lt;br/&gt;&amp;gt; &amp;gt; P2SH, and the upcoming Segwit). But we can generalize their use to&lt;br/&gt;&amp;gt; precisely&lt;br/&gt;&amp;gt; &amp;gt; defining consensus protocols in terms of state machines, with each state&lt;br/&gt;&amp;gt; &amp;gt; defined in terms of a deterministic expression that must return true for&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; &amp;gt; state to have been reached. The data that causes a given expression to&lt;br/&gt;&amp;gt; return&lt;br/&gt;&amp;gt; &amp;gt; true is then a &amp;#34;proof&amp;#34;, and that proof can be passed from one party to&lt;br/&gt;&amp;gt; another&lt;br/&gt;&amp;gt; &amp;gt; to prove desired states in the system have been reached.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; An important implication of this model is that we need deterministic, and&lt;br/&gt;&amp;gt; &amp;gt; efficient, serialization of proof data.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ## Pruning&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Often the evaluation of an expression against a proof doesn&amp;#39;t require&lt;br/&gt;&amp;gt; all all&lt;br/&gt;&amp;gt; &amp;gt; data in the proof. For example, to prove to a lite client that a given&lt;br/&gt;&amp;gt; block&lt;br/&gt;&amp;gt; &amp;gt; contains a transaction, we only need the merkle path from the&lt;br/&gt;&amp;gt; transaction to&lt;br/&gt;&amp;gt; &amp;gt; the block header. Systems like Proofchains and Dex generalize this&lt;br/&gt;&amp;gt; process -&lt;br/&gt;&amp;gt; &amp;gt; called &amp;#34;pruning&amp;#34; - with built-in support to both keep track of what data&lt;br/&gt;&amp;gt; is&lt;br/&gt;&amp;gt; &amp;gt; accessed by what operations, as well as support in their underlying&lt;br/&gt;&amp;gt; &amp;gt; serialization schemes for unneeded data to be elided and replaced by the&lt;br/&gt;&amp;gt; hash&lt;br/&gt;&amp;gt; &amp;gt; digest of the pruned data.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; # Transactions&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; A common type of state machine is the transaction. A transaction history&lt;br/&gt;&amp;gt; is a&lt;br/&gt;&amp;gt; &amp;gt; directed acyclic graph of transactions, with one or more genesis&lt;br/&gt;&amp;gt; transactions&lt;br/&gt;&amp;gt; &amp;gt; having no inputs (ancestors), and one or more outputs, and zero or more&lt;br/&gt;&amp;gt; &amp;gt; non-genesis transactions with one or more inputs, and zero or more&lt;br/&gt;&amp;gt; outputs. The&lt;br/&gt;&amp;gt; &amp;gt; edges of the graph connect inputs to outputs, with every input connected&lt;br/&gt;&amp;gt; to&lt;br/&gt;&amp;gt; &amp;gt; exactly one output. Outputs with an associated input are known as spent&lt;br/&gt;&amp;gt; &amp;gt; outputs; outputs with out an associated input are unspent.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Outputs have conditions attached to them (e.g. a pubkey for which a valid&lt;br/&gt;&amp;gt; &amp;gt; signature must be produced), and may also be associated with other&lt;br/&gt;&amp;gt; values such&lt;br/&gt;&amp;gt; &amp;gt; as &amp;#34;# of coins&amp;#34;. We consider a transaction valid if we have a set of&lt;br/&gt;&amp;gt; proofs,&lt;br/&gt;&amp;gt; &amp;gt; one per input, that satisfy the conditions associated with each output.&lt;br/&gt;&amp;gt; &amp;gt; Secondly, validity may also require additional constraints to be true,&lt;br/&gt;&amp;gt; such as&lt;br/&gt;&amp;gt; &amp;gt; requiring the coins spent to be &amp;gt;= the coins created on the outputs.&lt;br/&gt;&amp;gt; Input&lt;br/&gt;&amp;gt; &amp;gt; proofs also must uniquely commit to the transaction itself to be secure&lt;br/&gt;&amp;gt; - if&lt;br/&gt;&amp;gt; &amp;gt; they don&amp;#39;t the proofs can be reused in a replay attack.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; A non-genesis transaction is valid if:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 1. Any protocol-specific rules such as coins spent &amp;gt;= coins output are&lt;br/&gt;&amp;gt; &amp;gt;    followed.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 2. For every input a valid proof exists.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; 3. Every input transaction is itself valid.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; A practical implementation of the above for value-transfer systems like&lt;br/&gt;&amp;gt; Bitcoin&lt;br/&gt;&amp;gt; &amp;gt; could use two merkle-sum trees, one for the inputs, and one for the&lt;br/&gt;&amp;gt; outputs,&lt;br/&gt;&amp;gt; &amp;gt; with inputs simply committing to the previous transaction&amp;#39;s txid and&lt;br/&gt;&amp;gt; output #&lt;br/&gt;&amp;gt; &amp;gt; (outpoint), and outputs committing to a scriptPubKey and output amount.&lt;br/&gt;&amp;gt; &amp;gt; Witnesses can be provided separately, and would sign a signature&lt;br/&gt;&amp;gt; committing to&lt;br/&gt;&amp;gt; &amp;gt; the transaction or optionally, a subset of of inputs and/or outputs (with&lt;br/&gt;&amp;gt; &amp;gt; merkle trees we can easily avoid the exponential signature validation&lt;br/&gt;&amp;gt; problems&lt;br/&gt;&amp;gt; &amp;gt; bitcoin currently has).&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; As so long as all genesis transactions are unique, and our hash function&lt;br/&gt;&amp;gt; is&lt;br/&gt;&amp;gt; &amp;gt; secure, all transaction outputs can be uniquely identified (prior to&lt;br/&gt;&amp;gt; BIP34 the&lt;br/&gt;&amp;gt; &amp;gt; Bitcoin protocol actually failed at this!).&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ## Proof Distribution&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; How does Alice convince Bob that she has done a transaction that puts the&lt;br/&gt;&amp;gt; &amp;gt; system into the state that Bob wanted? The obvious answer is she gives&lt;br/&gt;&amp;gt; Bob data&lt;br/&gt;&amp;gt; &amp;gt; proving that the system is now in the desired state; in a transactional&lt;br/&gt;&amp;gt; system&lt;br/&gt;&amp;gt; &amp;gt; that proof is some or all of the transaction history. Systems like&lt;br/&gt;&amp;gt; Bitcoin&lt;br/&gt;&amp;gt; &amp;gt; provide a generic flood-fill messaging layer where all participants have&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; &amp;gt; opportunity to get a copy of all proofs in the system, however we can&lt;br/&gt;&amp;gt; also&lt;br/&gt;&amp;gt; &amp;gt; implement more fine grained solutions based on peer-to-peer message&lt;br/&gt;&amp;gt; passing -&lt;br/&gt;&amp;gt; &amp;gt; one could imagine Alice proving to Bob that she transferred title to her&lt;br/&gt;&amp;gt; house&lt;br/&gt;&amp;gt; &amp;gt; to him by giving him a series of proofs, not unlike the same way that&lt;br/&gt;&amp;gt; property&lt;br/&gt;&amp;gt; &amp;gt; title transfer can be demonstrated by providing the buyer with a series&lt;br/&gt;&amp;gt; of deed&lt;br/&gt;&amp;gt; &amp;gt; documents (though note the double-spend problem!).&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; # Uniqueness and Single-Use Seals&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; In addition to knowing that a given transaction history is valid, we&lt;br/&gt;&amp;gt; also want&lt;br/&gt;&amp;gt; &amp;gt; to know if it&amp;#39;s unique. By that we mean that every spent output in the&lt;br/&gt;&amp;gt; &amp;gt; transaction history is associated with exactly one input, and no other&lt;br/&gt;&amp;gt; valid&lt;br/&gt;&amp;gt; &amp;gt; spends exist; we want to ensure no output has been double-spent.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Bitcoin (and pretty much every other cryptocurrency like it) achieves&lt;br/&gt;&amp;gt; this goal&lt;br/&gt;&amp;gt; &amp;gt; by defining a method of achieving consensus over the set of all (valid)&lt;br/&gt;&amp;gt; &amp;gt; transactions, and then defining that consensus as valid if and only if no&lt;br/&gt;&amp;gt; &amp;gt; output is spent more than once.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; A more general approach is to introduce the idea of a cryptographic&lt;br/&gt;&amp;gt; Single-Use&lt;br/&gt;&amp;gt; &amp;gt; Seal, analogous to the tamper-evidence single-use seals commonly used for&lt;br/&gt;&amp;gt; &amp;gt; protecting goods during shipment and storage. Each individual seals is&lt;br/&gt;&amp;gt; &amp;gt; associated with a globally unique identifier, and has two states, open&lt;br/&gt;&amp;gt; and&lt;br/&gt;&amp;gt; &amp;gt; closed. A secure seal can be closed exactly once, producing a proof that&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; &amp;gt; seal was closed.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; All practical single-use seals will be associated with some kind of&lt;br/&gt;&amp;gt; condition,&lt;br/&gt;&amp;gt; &amp;gt; such as a pubkey, or deterministic expression, that needs to be&lt;br/&gt;&amp;gt; satisfied for&lt;br/&gt;&amp;gt; &amp;gt; the seal to be closed. Secondly, the contents of the proof will be able&lt;br/&gt;&amp;gt; to&lt;br/&gt;&amp;gt; &amp;gt; commit to new data, such as the transaction spending the output&lt;br/&gt;&amp;gt; associated with&lt;br/&gt;&amp;gt; &amp;gt; the seal.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Additionally some implementations of single-use seals may be able to also&lt;br/&gt;&amp;gt; &amp;gt; generate a proof that a seal was _not_ closed as of a certain&lt;br/&gt;&amp;gt; &amp;gt; time/block-height/etc.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ## Implementations&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ### Transactional Blockchains&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; A transaction output on a system like Bitcoin can be used as a&lt;br/&gt;&amp;gt; single-use seal.&lt;br/&gt;&amp;gt; &amp;gt; In this implementation, the outpoint (txid:vout #) is the seal&amp;#39;s&lt;br/&gt;&amp;gt; identifier,&lt;br/&gt;&amp;gt; &amp;gt; the authorization mechanism is the scriptPubKey of the output, and the&lt;br/&gt;&amp;gt; proof&lt;br/&gt;&amp;gt; &amp;gt; is the transaction spending the output. The proof can commit to&lt;br/&gt;&amp;gt; additional&lt;br/&gt;&amp;gt; &amp;gt; data as needed in a variety of ways, such as an OP_RETURN output, or&lt;br/&gt;&amp;gt; &amp;gt; unspendable output.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; This implementation approach is resistant to miner censorship if the&lt;br/&gt;&amp;gt; seal&amp;#39;s&lt;br/&gt;&amp;gt; &amp;gt; identifier isn&amp;#39;t made public, and the protocol (optionally) allows for&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; &amp;gt; proof transaction to commit to the sealed contents with unspendable&lt;br/&gt;&amp;gt; outputs;&lt;br/&gt;&amp;gt; &amp;gt; unspendable outputs can&amp;#39;t be distinguished from transactions that move&lt;br/&gt;&amp;gt; funds.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ### Unbounded Oracles&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; A trusted oracle P can maintain a set of closed seals, and produce signed&lt;br/&gt;&amp;gt; &amp;gt; messages attesting to the fact that a seal was closed. Specifically, the&lt;br/&gt;&amp;gt; seal&lt;br/&gt;&amp;gt; &amp;gt; is identified by the tuple (P, q), with q being the per-seal&lt;br/&gt;&amp;gt; authorization&lt;br/&gt;&amp;gt; &amp;gt; expression that must be satisfied for the seal to be closed. The first&lt;br/&gt;&amp;gt; time the&lt;br/&gt;&amp;gt; &amp;gt; oracle is given a valid signature for the seal, it adds that signature&lt;br/&gt;&amp;gt; and seal&lt;br/&gt;&amp;gt; &amp;gt; ID to its closed seal set, and makes available a signed message&lt;br/&gt;&amp;gt; attesting to&lt;br/&gt;&amp;gt; &amp;gt; the fact that the seal has been closed. The proof is that message (and&lt;br/&gt;&amp;gt; &amp;gt; possibly the signature, or a second message signed by it).&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The oracle can publish the set of all closed seals for&lt;br/&gt;&amp;gt; transparency/auditing&lt;br/&gt;&amp;gt; &amp;gt; purposes. A good way to do this is to make a merkelized key:value set,&lt;br/&gt;&amp;gt; with the&lt;br/&gt;&amp;gt; &amp;gt; seal identifiers as keys, and the value being the proofs, and in turn&lt;br/&gt;&amp;gt; create a&lt;br/&gt;&amp;gt; &amp;gt; signed certificate transparency log of that set over time. Merkle-paths&lt;br/&gt;&amp;gt; from&lt;br/&gt;&amp;gt; &amp;gt; this log can also serve as the closed seal proof, and for that matter, as&lt;br/&gt;&amp;gt; &amp;gt; proof of the fact that a seal has not been closed.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ### Bounded Oracles&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The above has the problem of unbounded storage requirements as the&lt;br/&gt;&amp;gt; closed seal&lt;br/&gt;&amp;gt; &amp;gt; set grows without bound. We can fix that problem by requiring users of&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; &amp;gt; oracle to allocate seals in advance, analogous to the UTXO set in&lt;br/&gt;&amp;gt; Bitcoin.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; To allocate a seal the user provides the oracle P with the authorization&lt;br/&gt;&amp;gt; &amp;gt; expression q. The oracle then generates a nonce n and adds (q,n) to the&lt;br/&gt;&amp;gt; set of&lt;br/&gt;&amp;gt; &amp;gt; unclosed seals, and tells the user that nonce. The seal is then uniquely&lt;br/&gt;&amp;gt; &amp;gt; identified by (P, q, n)&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; To close a seal, the user provides the oracle with a valid signature&lt;br/&gt;&amp;gt; over (P,&lt;br/&gt;&amp;gt; &amp;gt; q, n). If the open seal set contains that seal, the seal is removed from&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; &amp;gt; set and the oracle provides the user with a signed message attesting to&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; &amp;gt; valid close.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; A practical implementation would be to have the oracle publish a&lt;br/&gt;&amp;gt; transparency&lt;br/&gt;&amp;gt; &amp;gt; log, with each entry in the log committing to the set of all open seals&lt;br/&gt;&amp;gt; with a&lt;br/&gt;&amp;gt; &amp;gt; merkle set, as well as any seals closed during that entry. Again, merkle&lt;br/&gt;&amp;gt; paths&lt;br/&gt;&amp;gt; &amp;gt; for this log can serve as proofs to the open or closed state of a seal.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Note how with (U)TXO commitments, Bitcoin itself is a bounded oracle&lt;br/&gt;&amp;gt; &amp;gt; implementation that can produce compact proofs.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ### Group Seals&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Multiple seals can be combined into one, by having the open seal commit&lt;br/&gt;&amp;gt; to a&lt;br/&gt;&amp;gt; &amp;gt; set of sub-seals, and then closing the seal over a second set of closed&lt;br/&gt;&amp;gt; seal&lt;br/&gt;&amp;gt; &amp;gt; proofs. Seals that didn&amp;#39;t need to be closed can be closed over a special&lt;br/&gt;&amp;gt; &amp;gt; re-delegation message, re-delegating the seal to a new open seal.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Since the closed sub-seal proof can additionally include a proof of&lt;br/&gt;&amp;gt; &amp;gt; authorization, we have a protcol where the entity with authorization to&lt;br/&gt;&amp;gt; close&lt;br/&gt;&amp;gt; &amp;gt; the master seal has the ability to DoS attack sub-seals owners, but not&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; &amp;gt; ability to fraudulently close the seals over contents of their choosing.&lt;br/&gt;&amp;gt; This&lt;br/&gt;&amp;gt; &amp;gt; may be useful in cases where actions on the master seal is expensive -&lt;br/&gt;&amp;gt; such as&lt;br/&gt;&amp;gt; &amp;gt; seals implemented on top of decentralized blockchains - by amortising&lt;br/&gt;&amp;gt; the cost&lt;br/&gt;&amp;gt; &amp;gt; over all sub-seals.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ## Atomicity&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Often protocols will require multiple seals to be closed for a&lt;br/&gt;&amp;gt; transaction to&lt;br/&gt;&amp;gt; &amp;gt; be valid. If a single entity controls all seals, this is no problem: the&lt;br/&gt;&amp;gt; &amp;gt; transaction simply isn&amp;#39;t valid until the last seal is closed.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; However if multiple parties control the seals, a party could attack&lt;br/&gt;&amp;gt; another&lt;br/&gt;&amp;gt; &amp;gt; party by failing to go through with the transaction, after another party&lt;br/&gt;&amp;gt; has&lt;br/&gt;&amp;gt; &amp;gt; closed their seal, leaving the victim with an invalid transaction that&lt;br/&gt;&amp;gt; they&lt;br/&gt;&amp;gt; &amp;gt; can&amp;#39;t reverse.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; We have a few options to resolve this problem:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ### Use a single oracle&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The oracle can additionally guarantee that a seal will be closed iff&lt;br/&gt;&amp;gt; some other&lt;br/&gt;&amp;gt; &amp;gt; set of seals are also closed; seals implemented with Bitcoin can provide&lt;br/&gt;&amp;gt; this&lt;br/&gt;&amp;gt; &amp;gt; guarantee. If the parties to a transaction aren&amp;#39;t already all on the same&lt;br/&gt;&amp;gt; &amp;gt; oracle, they can add an additional transaction reassigning their outputs&lt;br/&gt;&amp;gt; to a&lt;br/&gt;&amp;gt; &amp;gt; common oracle.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Equally, a temporary consensus between multiple mutually trusting&lt;br/&gt;&amp;gt; oracles can&lt;br/&gt;&amp;gt; &amp;gt; be created with a consensus protocol they share; this option doesn&amp;#39;t&lt;br/&gt;&amp;gt; need to&lt;br/&gt;&amp;gt; &amp;gt; change the proof verification implementation.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ### Two-phase Timeouts&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; If a proof to the fact that a seal is open can be generated, even under&lt;br/&gt;&amp;gt; &amp;gt; adversarial conditions, we can make the seal protocol allow a close to be&lt;br/&gt;&amp;gt; &amp;gt; undone after a timeout if evidence can be provided that the other&lt;br/&gt;&amp;gt; seal(s) were&lt;br/&gt;&amp;gt; &amp;gt; not also closed (in the specified way).&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Depending on the implementation - especially in decentralized systems -&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; &amp;gt; next time the seal is closed, the proof it has been closed may in turn&lt;br/&gt;&amp;gt; provide&lt;br/&gt;&amp;gt; &amp;gt; proof that a previous close was in fact invalid.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; # Proof-of-Publication and Proof-of-Non-Publication&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Often we need to be able to prove that a specified audience was able to&lt;br/&gt;&amp;gt; receive&lt;br/&gt;&amp;gt; &amp;gt; a specific message. For example, the author&amp;#39;s PayPub protocol[^paypub],&lt;br/&gt;&amp;gt; &amp;gt; Todd/Taaki&amp;#39;s timelock encryption protocol[^timelock], Zero-Knowledge&lt;br/&gt;&amp;gt; Contingent&lt;br/&gt;&amp;gt; &amp;gt; Payments[^zkcp], and Lightning, among others work by requiring a secret&lt;br/&gt;&amp;gt; key to&lt;br/&gt;&amp;gt; &amp;gt; be published publicly in the Bitcoin blockchain as a condition of&lt;br/&gt;&amp;gt; collecting a&lt;br/&gt;&amp;gt; &amp;gt; payment. At a much smaller scale - in terms of audience - in certain&lt;br/&gt;&amp;gt; FinTech&lt;br/&gt;&amp;gt; &amp;gt; applications for regulated environments a transaction may be considered&lt;br/&gt;&amp;gt; invalid&lt;br/&gt;&amp;gt; &amp;gt; unless it was provably published to a regulatory agency.  Another&lt;br/&gt;&amp;gt; example is&lt;br/&gt;&amp;gt; &amp;gt; Certificate Transparency, where we consider a SSL certificate to be&lt;br/&gt;&amp;gt; invalid&lt;br/&gt;&amp;gt; &amp;gt; unless it has been provably published to a transparency log maintained&lt;br/&gt;&amp;gt; by a&lt;br/&gt;&amp;gt; &amp;gt; third-party.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Secondly, many proof-of-publication schemes also can prove that a&lt;br/&gt;&amp;gt; message was&lt;br/&gt;&amp;gt; &amp;gt; _not_ published to a specific audience. With this type of proof&lt;br/&gt;&amp;gt; single-use&lt;br/&gt;&amp;gt; &amp;gt; seals can be implemented, by having the proof consist of proof that a&lt;br/&gt;&amp;gt; specified&lt;br/&gt;&amp;gt; &amp;gt; message was not published between the time the seal was created, and the&lt;br/&gt;&amp;gt; time&lt;br/&gt;&amp;gt; &amp;gt; it was closed (a proof-of-publication of the message).&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ## Implementations&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ### Decentralized Blockchains&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Here the audience is all participants in the system. However miner&lt;br/&gt;&amp;gt; censorship&lt;br/&gt;&amp;gt; &amp;gt; can be a problem, and compact proofs of non-publication aren&amp;#39;t yet&lt;br/&gt;&amp;gt; available&lt;br/&gt;&amp;gt; &amp;gt; (requires (U)TXO commitments).&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The authors treechains proposal is a particularly generic and scalable&lt;br/&gt;&amp;gt; &amp;gt; implementation, with the ability to make trade offs between the size of&lt;br/&gt;&amp;gt; &amp;gt; audience (security) and publication cost.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ### Centralized Public Logs&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Certificate Transparency works this way, with trusted (but auditable)&lt;br/&gt;&amp;gt; logs run&lt;br/&gt;&amp;gt; &amp;gt; by well known parties acting as the publication medium, who promise to&lt;br/&gt;&amp;gt; allow&lt;br/&gt;&amp;gt; &amp;gt; anyone to obtain copies of the logs.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The logs themselves may be indexed in a variety of ways; CT simply&lt;br/&gt;&amp;gt; indexes logs&lt;br/&gt;&amp;gt; &amp;gt; by time, however more efficient schemes are possible by having the&lt;br/&gt;&amp;gt; operator&lt;br/&gt;&amp;gt; &amp;gt; commit to a key:value mapping of &amp;#34;topics&amp;#34;, to allow publication (and&lt;br/&gt;&amp;gt; &amp;gt; non-publication) proofs to be created for specified topics or topic&lt;br/&gt;&amp;gt; prefixes.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Auditing the logs is done by verifying that queries to the state of the&lt;br/&gt;&amp;gt; log&lt;br/&gt;&amp;gt; &amp;gt; return the same state at the same time for different requesters.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ### Receipt Oracles&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Finally publication can be proven by a receipt proof by the oracle,&lt;br/&gt;&amp;gt; attesting&lt;br/&gt;&amp;gt; &amp;gt; to the fact that the oracle has successfully received the message. This&lt;br/&gt;&amp;gt; is&lt;br/&gt;&amp;gt; &amp;gt; particularly appropriate in cases where the required audience is the&lt;br/&gt;&amp;gt; oracle&lt;br/&gt;&amp;gt; &amp;gt; itself, as in the FinTech regulator case.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; # Validity Oracles&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; As transaction histories grow longer, they may become impractical to&lt;br/&gt;&amp;gt; move from&lt;br/&gt;&amp;gt; &amp;gt; one party to another. Validity oracles can solve this problem by&lt;br/&gt;&amp;gt; attesting to&lt;br/&gt;&amp;gt; &amp;gt; the validity of transactions, allowing history prior to the attested&lt;br/&gt;&amp;gt; &amp;gt; transactions to be discarded.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; A particularly generic validity oracle can be created using deterministic&lt;br/&gt;&amp;gt; &amp;gt; expressions systems. The user gives the oracle an expression, and the&lt;br/&gt;&amp;gt; oracle&lt;br/&gt;&amp;gt; &amp;gt; returns a signed message attesting to the validity of the expression.&lt;br/&gt;&amp;gt; &amp;gt; Optionally, the expression may be incomplete, with parts of the&lt;br/&gt;&amp;gt; expression&lt;br/&gt;&amp;gt; &amp;gt; replaced by previously generated attestations. For example, an&lt;br/&gt;&amp;gt; expression that&lt;br/&gt;&amp;gt; &amp;gt; returns true if a transaction is valid could in turn depend on the&lt;br/&gt;&amp;gt; previous&lt;br/&gt;&amp;gt; &amp;gt; transaction also being valid - a recursive call of itself - and that&lt;br/&gt;&amp;gt; recursive&lt;br/&gt;&amp;gt; &amp;gt; call can be proven with a prior attestation.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ## Implementations&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ### Proof-of-Work Decentralized Consensus&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Miners in decentralized consensus systems act as a type of validity&lt;br/&gt;&amp;gt; oracle, in&lt;br/&gt;&amp;gt; &amp;gt; that the economic incentives in the system are (supposed to be) designed&lt;br/&gt;&amp;gt; to&lt;br/&gt;&amp;gt; &amp;gt; encourage only the mining of valid blocks; a user who trusts the&lt;br/&gt;&amp;gt; majority of&lt;br/&gt;&amp;gt; &amp;gt; hashing power can trust that any transaction with a valid merkle path to&lt;br/&gt;&amp;gt; a&lt;br/&gt;&amp;gt; &amp;gt; block header in the most-work chain is valid. Existing decentralized&lt;br/&gt;&amp;gt; consensus&lt;br/&gt;&amp;gt; &amp;gt; systems like Bitcoin and Ethereum conflate the roles of validity oracle&lt;br/&gt;&amp;gt; and&lt;br/&gt;&amp;gt; &amp;gt; single-use seal/anti-replay oracle, however in principle that need not&lt;br/&gt;&amp;gt; be true.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ### Trusted Oracles&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; As the name suggests. Remote-attestation-capable trusted hardware is a&lt;br/&gt;&amp;gt; &amp;gt; particularly powerful implementation - a conspiracy theory is that the&lt;br/&gt;&amp;gt; reason&lt;br/&gt;&amp;gt; &amp;gt; why essentially zero secure true remote attestation implementations&lt;br/&gt;&amp;gt; exist is&lt;br/&gt;&amp;gt; &amp;gt; because they&amp;#39;d immediately make untraceable digital currency systems&lt;br/&gt;&amp;gt; easy to&lt;br/&gt;&amp;gt; &amp;gt; implement (Finney&amp;#39;s RPOW[^rpow] is a rare counter-example).&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Note how a single-use seal oracle that supports a generic deterministic&lt;br/&gt;&amp;gt; &amp;gt; expressions scheme for seal authorization can be easily extended to&lt;br/&gt;&amp;gt; provide a&lt;br/&gt;&amp;gt; &amp;gt; validity oracle service as well. The auditing mechanisms for a&lt;br/&gt;&amp;gt; single-use seal&lt;br/&gt;&amp;gt; &amp;gt; oracle can also be applied to validity oracles.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; # Fraud Proofs&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Protocols specified with deterministic expressions can easily generate&lt;br/&gt;&amp;gt; &amp;#34;fraud&lt;br/&gt;&amp;gt; &amp;gt; proofs&amp;#34;, showing that claimed states/proof in the system are actually&lt;br/&gt;&amp;gt; invalid.&lt;br/&gt;&amp;gt; &amp;gt; Additionally many protocols can be specified with expressions of&lt;br/&gt;&amp;gt; k*log2(n)&lt;br/&gt;&amp;gt; &amp;gt; depth, allowing these fraud proofs to be compact.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; A simple example is proving fraud in merkle-sum tree, where the validity&lt;br/&gt;&amp;gt; &amp;gt; expression would be something like:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     (defun valid? (node)&lt;br/&gt;&amp;gt; &amp;gt;         (or (== node.type leaf)&lt;br/&gt;&amp;gt; &amp;gt;             (and (== node.sum (&#43; node.left.sum node.right.sum))&lt;br/&gt;&amp;gt; &amp;gt;                  (and (valid? node.left)&lt;br/&gt;&amp;gt; &amp;gt;                       (valid? node.right)))))&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; To prove the above expression evaluates to true, we&amp;#39;ll need the entire&lt;br/&gt;&amp;gt; contents&lt;br/&gt;&amp;gt; &amp;gt; of the tree. However, to prove that it evaluates to false, we only need a&lt;br/&gt;&amp;gt; &amp;gt; subset of the tree as proving an and expression evaluates to false only&lt;br/&gt;&amp;gt; &amp;gt; requires one side, and requires log2(n) data. Secondly, with pruning, the&lt;br/&gt;&amp;gt; &amp;gt; deterministic expressions evaluator can automatically keep track of&lt;br/&gt;&amp;gt; exactly&lt;br/&gt;&amp;gt; &amp;gt; what data was needed to prove that result, and prune all other data when&lt;br/&gt;&amp;gt; &amp;gt; serializing the proof.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ## Validity Challenges&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; However how do you guarantee it will be possible to prove fraud in the&lt;br/&gt;&amp;gt; first&lt;br/&gt;&amp;gt; &amp;gt; place? If pruning is allowed, you may simply not have access to the data&lt;br/&gt;&amp;gt; &amp;gt; proving fraud - an especially severe problem in transactional systems&lt;br/&gt;&amp;gt; where a&lt;br/&gt;&amp;gt; &amp;gt; single fraudulent transaction can counterfeit arbitrary amounts of value&lt;br/&gt;&amp;gt; out of&lt;br/&gt;&amp;gt; &amp;gt; thin air.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; A possible approach is the validity challenge: a subset of proof data,&lt;br/&gt;&amp;gt; with&lt;br/&gt;&amp;gt; &amp;gt; part of the data marked as &amp;#34;potentially fraudulent&amp;#34;. The challenge can be&lt;br/&gt;&amp;gt; &amp;gt; satisfied by providing the marked data and showing that the proof in&lt;br/&gt;&amp;gt; question&lt;br/&gt;&amp;gt; &amp;gt; is in fact valid; if the challenge is unmet participants in the system&lt;br/&gt;&amp;gt; can&lt;br/&gt;&amp;gt; &amp;gt; choose to take action, such as refusing to accept additional&lt;br/&gt;&amp;gt; transactions.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Of course, this raises a whole host of so-far unsolved issues, such as&lt;br/&gt;&amp;gt; DoS&lt;br/&gt;&amp;gt; &amp;gt; attacks and lost data.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; # Probabilistic Validation&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Protocols that can tolerate some fraud can make use of probabilistic&lt;br/&gt;&amp;gt; &amp;gt; verification techniques to prove that the percentage of undetected fraud&lt;br/&gt;&amp;gt; within&lt;br/&gt;&amp;gt; &amp;gt; the system is less than a certain amount, with a specified probability.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; A common way to do this is the Fiat-Shamir transform, which repeatedly&lt;br/&gt;&amp;gt; samples&lt;br/&gt;&amp;gt; &amp;gt; a data structure deterministically, using the data&amp;#39;s own hash digest as&lt;br/&gt;&amp;gt; a seed&lt;br/&gt;&amp;gt; &amp;gt; for a PRNG. Let&amp;#39;s apply this technique to our merkle-sum tree example.&lt;br/&gt;&amp;gt; We&amp;#39;ll&lt;br/&gt;&amp;gt; &amp;gt; first need a recursive function to check a sample, weighted by value:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     (defun prefix-valid? (node nonce)&lt;br/&gt;&amp;gt; &amp;gt;         (or (== node.type leaf)&lt;br/&gt;&amp;gt; &amp;gt;             (and (and (== node.sum (&#43; node.left.sum node.right.sum))&lt;br/&gt;&amp;gt; &amp;gt;                       (&amp;gt; 0 node.sum)) ; mod by 0 is invalid, just like&lt;br/&gt;&amp;gt; division by zero&lt;br/&gt;&amp;gt; &amp;gt;                                       ; also could guarantee this with a&lt;br/&gt;&amp;gt; type system&lt;br/&gt;&amp;gt; &amp;gt;                  (and (if (&amp;lt; node.left.sum (mod nonce node.sum))&lt;br/&gt;&amp;gt; &amp;gt;                           (prefix-valid? node.right (hash nonce))&lt;br/&gt;&amp;gt; &amp;gt;                           (prefix-valid? node.left (hash nonce)))))))&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Now we can combine multiple invocations of the above, in this case 256&lt;br/&gt;&amp;gt; &amp;gt; invocations:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     (defun prob-valid? (node)&lt;br/&gt;&amp;gt; &amp;gt;         (and (and (and .... (prefix-valid? node (digest (cons (digest&lt;br/&gt;&amp;gt; node) 0)))&lt;br/&gt;&amp;gt; &amp;gt;              (and (and ....&lt;br/&gt;&amp;gt; &amp;gt;                             (prefix-valid? node (digest (cons (digest&lt;br/&gt;&amp;gt; node) 255)))&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; As an exercise for a reader: generalize the above with a macro, or a&lt;br/&gt;&amp;gt; suitable&lt;br/&gt;&amp;gt; &amp;gt; types/generics system.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; If we assume our attacker can grind up to 128 bits, that leaves us with&lt;br/&gt;&amp;gt; 128&lt;br/&gt;&amp;gt; &amp;gt; random samples that they can&amp;#39;t control. If the (value weighted)&lt;br/&gt;&amp;gt; probability of&lt;br/&gt;&amp;gt; &amp;gt; a given node is fraudulent q, then the chance of the attacker getting&lt;br/&gt;&amp;gt; away with&lt;br/&gt;&amp;gt; &amp;gt; fraud is (1-q)^128 - for q=5% that works out to 0.1%&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; (Note that the above analysis isn&amp;#39;t particularly well done - do a better&lt;br/&gt;&amp;gt; &amp;gt; analysis before implementing this in production!)&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ## Random Beacons and Transaction History Linearization&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The Fiat-Shamir transform requires a significant number of samples to&lt;br/&gt;&amp;gt; defeat&lt;br/&gt;&amp;gt; &amp;gt; grinding attacks; if we have a random beacon available we can&lt;br/&gt;&amp;gt; significantly&lt;br/&gt;&amp;gt; &amp;gt; reduce the size of our probabilistic proofs. PoW blockchains can&lt;br/&gt;&amp;gt; themselves act&lt;br/&gt;&amp;gt; &amp;gt; as random beacons, as it is provably expensive for miners to manipulate&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; &amp;gt; hash digests of blocks they produce - to do so requires discarding&lt;br/&gt;&amp;gt; otherwise&lt;br/&gt;&amp;gt; &amp;gt; valid blocks.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; An example where this capability is essential is the author&amp;#39;s transaction&lt;br/&gt;&amp;gt; &amp;gt; history linearization technique. In value transfer systems such as&lt;br/&gt;&amp;gt; Bitcoin, the&lt;br/&gt;&amp;gt; &amp;gt; history of any given coin grows quasi-exponentially as coins are mixed&lt;br/&gt;&amp;gt; across&lt;br/&gt;&amp;gt; &amp;gt; the entire economy. We can linearize the growth of history proofs by&lt;br/&gt;&amp;gt; redefining&lt;br/&gt;&amp;gt; &amp;gt; coin validity to be probabilistic.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Suppose we have a transaction with n inputs. Of those inputs, the total&lt;br/&gt;&amp;gt; value&lt;br/&gt;&amp;gt; &amp;gt; of real inputs is p, and the total claimed value of fake inputs is q. The&lt;br/&gt;&amp;gt; &amp;gt; transaction commits to all inputs in a merkle sum tree, and we define the&lt;br/&gt;&amp;gt; &amp;gt; transaction as valid if a randomly chosen input - weighted by value - can&lt;br/&gt;&amp;gt; &amp;gt; itself be proven valid. Finally, we assume that creating a genuine input&lt;br/&gt;&amp;gt; is a&lt;br/&gt;&amp;gt; &amp;gt; irrevocable action which irrevocable commits to the set of all inputs,&lt;br/&gt;&amp;gt; real and&lt;br/&gt;&amp;gt; &amp;gt; fake.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; If all inputs are real, 100% of the time the transaction will be valid;&lt;br/&gt;&amp;gt; if all&lt;br/&gt;&amp;gt; &amp;gt; inputs are fake, 100% of the time the transaction will be invalid. In&lt;br/&gt;&amp;gt; the case&lt;br/&gt;&amp;gt; &amp;gt; where some inputs are real and some are fake the probability that the&lt;br/&gt;&amp;gt; fraud&lt;br/&gt;&amp;gt; &amp;gt; will be detected is:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     q / (q &#43; p)&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; The expected value of the fake inputs is then the sum of the potential&lt;br/&gt;&amp;gt; upside -&lt;br/&gt;&amp;gt; &amp;gt; the fraud goes detected - and the potential downside - the fraud is&lt;br/&gt;&amp;gt; detected&lt;br/&gt;&amp;gt; &amp;gt; and the real inputs are destroyed:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     E = q(1 - q/(q &#43; p)) - p(q/(q &#43; p)&lt;br/&gt;&amp;gt; &amp;gt;       = q(p/(q &#43; p)) - p(q/(q &#43; p)&lt;br/&gt;&amp;gt; &amp;gt;       = (q - q)(p/(q &#43; p))&lt;br/&gt;&amp;gt; &amp;gt;       = 0&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; Thus so long as the random beacon is truly unpredictable, there&amp;#39;s no&lt;br/&gt;&amp;gt; economic&lt;br/&gt;&amp;gt; &amp;gt; advantage to creating fake inputs, and it is sufficient for validity to&lt;br/&gt;&amp;gt; only&lt;br/&gt;&amp;gt; &amp;gt; require one input to be proven, giving us O(n) scaling for transaction&lt;br/&gt;&amp;gt; history&lt;br/&gt;&amp;gt; &amp;gt; proofs.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; ### Inflationary O(1) History Proofs&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; We can further improve our transaction history proof scalability by&lt;br/&gt;&amp;gt; taking&lt;br/&gt;&amp;gt; &amp;gt; advantage of inflation. We do this by occasionally allowing a&lt;br/&gt;&amp;gt; transaction proof&lt;br/&gt;&amp;gt; &amp;gt; to be considered valid without validating _any_ of the inputs; every&lt;br/&gt;&amp;gt; time a&lt;br/&gt;&amp;gt; &amp;gt; transaction is allowed without proving any inputs the size of the&lt;br/&gt;&amp;gt; transaction&lt;br/&gt;&amp;gt; &amp;gt; history proof is reset. Of course, this can be a source of inflation, but&lt;br/&gt;&amp;gt; &amp;gt; provided the probability of this happening can be limited we can limit&lt;br/&gt;&amp;gt; the&lt;br/&gt;&amp;gt; &amp;gt; maximum rate of inflation to the chosen value.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; For example, in Bitcoin as of writing every block inflates the currency&lt;br/&gt;&amp;gt; supply&lt;br/&gt;&amp;gt; &amp;gt; by 25BTC, and contains a maximum of 1MB of transaction data,&lt;br/&gt;&amp;gt; 0.025BTC/KB. If we&lt;br/&gt;&amp;gt; &amp;gt; check the prior input proof with probability p, then the expected value&lt;br/&gt;&amp;gt; of a&lt;br/&gt;&amp;gt; &amp;gt; transaction claiming to spend x BTC is:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     E = x(1-p)&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; We can rewrite that in terms of the block reward per-byte R, and the&lt;br/&gt;&amp;gt; transaction size l:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     lR = x(1-p)&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; And solving for p:&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt;     p = 1 - lR/x&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; For example, for a 1KB transaction proof claiming to spending 10BTC we&lt;br/&gt;&amp;gt; can omit&lt;br/&gt;&amp;gt; &amp;gt; checking the input 0.25% of the time without allowing more monetary&lt;br/&gt;&amp;gt; inflation&lt;br/&gt;&amp;gt; &amp;gt; than the block reward already does. Secondly, this means that after n&lt;br/&gt;&amp;gt; &amp;gt; transactions, the probability that proof shortening will _not_ happen is&lt;br/&gt;&amp;gt; p^n,&lt;br/&gt;&amp;gt; &amp;gt; which reaches 1% after 1840 transactions.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; In a system like Bitcoin where miners are expected to validate, a&lt;br/&gt;&amp;gt; transaction&lt;br/&gt;&amp;gt; &amp;gt; proof could consist of just a single merkle path showing that a&lt;br/&gt;&amp;gt; single-use seal&lt;br/&gt;&amp;gt; &amp;gt; was closed in some kind of TXO commitment - probably under 10KB of data.&lt;br/&gt;&amp;gt; That&lt;br/&gt;&amp;gt; &amp;gt; gives us a history proof less than 18.4MB in size, 99% of the time, and&lt;br/&gt;&amp;gt; less&lt;br/&gt;&amp;gt; &amp;gt; than 9.2MB in size 90% of the time.&lt;br/&gt;&amp;gt; &amp;gt;&lt;br/&gt;&amp;gt; &amp;gt; An interesting outcome of thing kind of design is that we can&lt;br/&gt;&amp;gt; institutionalize&lt;br/&gt;&amp;gt; &amp;gt; inflation fraud: the entire block reward can be replaced by miners&lt;br/&gt;&amp;gt; rolling the&lt;br/&gt;&amp;gt; &amp;gt; dice, attempting to create valid &amp;#34;fake&amp;#34; transactions. However, such a&lt;br/&gt;&amp;gt; pure&lt;br/&gt;&amp;gt; &amp;gt; implementation would put a floor on the lowest transaction fee possible,&lt;br/&gt;&amp;gt; so&lt;br/&gt;&amp;gt; &amp;gt; better to allow both transaction fee and subsidy collection at the same&lt;br/&gt;&amp;gt; time.&lt;br/&gt;&amp;gt; &amp;gt;&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; [^paypub] &lt;a href=&#34;https://github.com/unsystem/paypub&#34;&gt;https://github.com/unsystem/paypub&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt; [^timelock] &lt;a href=&#34;https://github.com/petertodd/timelock&#34;&gt;https://github.com/petertodd/timelock&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt; [^zkcp]&lt;br/&gt;&amp;gt; &lt;a href=&#34;https://bitcoincore.org/en/2016/02/26/zero-knowledge-contingent-payments-announcement/&#34;&gt;https://bitcoincore.org/en/2016/02/26/zero-knowledge-contingent-payments-announcement/&lt;/a&gt;&lt;br/&gt;&amp;gt; &amp;gt; [^rpow] &lt;a href=&#34;https://cryptome.org/rpow.htm&#34;&gt;https://cryptome.org/rpow.htm&lt;/a&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-dev mailing list&lt;br/&gt;&amp;gt; &amp;gt; bitcoin-dev at lists.linuxfoundation.org&lt;br/&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; 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;-------------- 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/20160620/f6abdd58/attachment-0001.html&amp;gt&#34;&gt;http://lists.linuxfoundation.org/pipermail/bitcoin-dev/attachments/20160620/f6abdd58/attachment-0001.html&amp;gt&lt;/a&gt;;
    </content>
    <updated>2023-06-07T17:51:12Z</updated>
  </entry>

</feed>