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




  <entry>
    <id>https://nostr.ae/nevent1qqsvfsz7cgpdl7pjec2t2utwspknnyr8ad4h0vm2xh4xp959n4cfcsgzyrl5hgru3wpwqdr2v2lhfkyz9g4jmrrzrjw462ggruce5xymvhvwuhffkcq</id>
    
      <title type="html">📅 Original date posted:2016-06-23 📝 Original message:In ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsvfsz7cgpdl7pjec2t2utwspknnyr8ad4h0vm2xh4xp959n4cfcsgzyrl5hgru3wpwqdr2v2lhfkyz9g4jmrrzrjw462ggruce5xymvhvwuhffkcq" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqszldtta987ejhcgn6me2crp6ggvk6s9awzgrgg40ckg2j0jdqy6dqfa54n5&#39;&gt;nevent1q…54n5&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2016-06-23&lt;br/&gt;📝 Original message:In England under RIPA 2000 legislation, it&amp;#39;s irrelevant whether you have&lt;br/&gt;the data or not. If the authorities compel you to hand over that&lt;br/&gt;information, and it is within your means to obtain it then you are&lt;br/&gt;obliged to do so under threat of criminal offense.&lt;br/&gt;&lt;br/&gt;So any mechanism whereby data could be collected from Bitcoin users,&lt;br/&gt;whether it&amp;#39;s stored ephemerally or not, if the police have reasonable&lt;br/&gt;suspicion to think it exists then they can compel all parties to work to&lt;br/&gt;get them the data they require.&lt;br/&gt;&lt;br/&gt;If the mechanism flat out does not exist, that is miles better than&lt;br/&gt;could exist. Deniability is not a defense when served with a police&lt;br/&gt;notice for disclosing data.&lt;br/&gt;&lt;br/&gt;You have to think not only about the end result, but also about how&lt;br/&gt;these mechanisms can be used for intimidating users or leveraging&lt;br/&gt;technologies.&lt;br/&gt;&lt;br/&gt;Justin Newton via bitcoin-dev:&lt;br/&gt;&amp;gt; On Thu, Jun 23, 2016 at 1:46 PM, s7r 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;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt; Any kind of built-in AML/KYC tools in Bitcoin is bad, and might draw&lt;br/&gt;&amp;gt;&amp;gt; expectations from _all_ users from authorities. Companies or individuals&lt;br/&gt;&amp;gt;&amp;gt; who want and/or need AML/KYC can find ways and do it at their side&lt;br/&gt;&amp;gt;&amp;gt; isolated from the entire network, and the solutions shouldn&amp;#39;t come from&lt;br/&gt;&amp;gt;&amp;gt; upstream. AML/KYC/&amp;lt;insert other regulation here&amp;gt; differ from country to&lt;br/&gt;&amp;gt;&amp;gt; country and will be hard to implement in a global consensus network even&lt;br/&gt;&amp;gt;&amp;gt; if it would be worth it.&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&lt;br/&gt;&amp;gt; This was precisely our thinking as well.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; This is actually exactly why BIP 75 was designed the way that it was.  Any&lt;br/&gt;&amp;gt; (voluntary) identity exchange is done at the application level, on an&lt;br/&gt;&amp;gt; encrypted https (or other) connection between the sender and receiver.&lt;br/&gt;&amp;gt; Identity data is not passed through or stored on the blockchain, and there&lt;br/&gt;&amp;gt; is actually no mark left on the blockchain that identity was even exchanged&lt;br/&gt;&amp;gt; on that transaction.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; The only people who know identity info was exchanged, or what the identity&lt;br/&gt;&amp;gt; was is the counterparties in the transaction, and depending on&lt;br/&gt;&amp;gt; implementation, their service provider.  (At a high level, many software&lt;br/&gt;&amp;gt; based wallet providers wouldn’t have any visibility into identity info,&lt;br/&gt;&amp;gt; where many hosted services would, for example)&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; We did this to protect user privacy as well as fungibility.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; We are allowing the people who want or need to exchange identtity info&lt;br/&gt;&amp;gt; (either self signed or 3rd party validated) the option to exchange it, in a&lt;br/&gt;&amp;gt; standards based way, directly between peers, without touching the&lt;br/&gt;&amp;gt; blockchain or network itself.&lt;br/&gt;&amp;gt; &lt;br/&gt;&amp;gt; Is this more clear?&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;
    </content>
    <updated>2023-06-07T17:51:25Z</updated>
  </entry>

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

</feed>