<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <updated>2023-06-09T14:21:12&#43;02:00</updated>
  <generator>https://nostr.ae</generator>

  <title>Nostr notes by Yaacov Akiba Slama [ARCHIVE]</title>
  <author>
    <name>Yaacov Akiba Slama [ARCHIVE]</name>
  </author>
  <link rel="self" type="application/atom+xml" href="https://nostr.ae/npub1z07sgdx84scq77jx3fddj3jt0w2w3vpa0t5gyk0nmcaggs3gyt7s6at6uz.rss" />
  <link href="https://nostr.ae/npub1z07sgdx84scq77jx3fddj3jt0w2w3vpa0t5gyk0nmcaggs3gyt7s6at6uz" />
  <id>https://nostr.ae/npub1z07sgdx84scq77jx3fddj3jt0w2w3vpa0t5gyk0nmcaggs3gyt7s6at6uz</id>
  <icon></icon>
  <logo></logo>




  <entry>
    <id>https://nostr.ae/nevent1qqszm9zmvg6e5ft6e0ajnktwtwyljrtpq2usfnexwpqf9n7u28pzz6qzyqfl6pp5c7krqrm6g6994k2xfdaef69s84aw3qje700r4pzz9q306tcj7wa</id>
    
      <title type="html">📅 Original date posted:2019-11-12 📝 Original message: On ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqszm9zmvg6e5ft6e0ajnktwtwyljrtpq2usfnexwpqf9n7u28pzz6qzyqfl6pp5c7krqrm6g6994k2xfdaef69s84aw3qje700r4pzz9q306tcj7wa" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsw9hmh99wwmcs4099xplz3gc96dlf0kwd5et6jndc7775tj6unqfq4a02y7&#39;&gt;nevent1q…02y7&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-11-12&lt;br/&gt;📝 Original message:&lt;br/&gt;On 11/11/2019 06:11, Rusty Russell wrote:&lt;br/&gt;&amp;gt; 2) From a technical point of view, it seems that there are already UBL &lt;br/&gt;&amp;gt; libraries in java and c#. I don&amp;#39;t think such library is hard to write in &lt;br/&gt;&amp;gt; go, rust.., so every wallet implementation can use them.&lt;br/&gt;&amp;gt; That is not the problem.  The problem is that our order flow is simple:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;         Seller: Offer&lt;br/&gt;&amp;gt;         Buyer: Invoice Request&lt;br/&gt;&amp;gt;         Seller: Invoice (or updated Offer)&lt;br/&gt;&amp;gt;         Buyer/Seller: Payment &amp;amp; Acknowledgement (atomic)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; (This could, of course, fit into a larger business flow.)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The closest UBL flow seems to be:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;         Seller: Quotation&lt;br/&gt;&amp;gt;         Buyer: Order&lt;br/&gt;&amp;gt;         Seller: (Prepayment)Invoice (or updated Quotation)&lt;br/&gt;&lt;br/&gt;In UBL, 2 flows are defined (Traditional and Self Billing) and from what&lt;br/&gt;I know, the right flow depends on the country and even on the industry&lt;br/&gt;(services or goods for instance). What I suggest is to superpose the&lt;br/&gt;&amp;#34;strict&amp;#34; LN flow (invoice then payment) to the business flow. So for&lt;br/&gt;instance when a prepayment invoice is needed, the simplified (from UBL&lt;br/&gt;pov) flow will be:&lt;br/&gt;&lt;br/&gt;  Seller: Quotation (UBL)&lt;br/&gt;&lt;br/&gt;  Buyer: Order (UBL)&lt;br/&gt;&lt;br/&gt;  Seller: Prepayment Invoice (UBL)&lt;br/&gt;&lt;br/&gt;  Seller: Invoice (LN)&lt;br/&gt;&lt;br/&gt;  Buyer/Seller: Payment &amp;amp; Ack (LN)&lt;br/&gt;&lt;br/&gt;  Buyer: Receipt (UBL)&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;The advantage of such workflow are that we don&amp;#39;t need to add any fields&lt;br/&gt;to the current invoice structure, nor to define in the LN protocol new&lt;br/&gt;messages like offer or invoice request, nor to intervene in the semantic&lt;br/&gt;of the business workflow and in the required/optional fields in these&lt;br/&gt;messages.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; It&amp;#39;s also worth noting that, even compressed, none of the UBL examples&lt;br/&gt;&amp;gt; fit into the 1023 byte limit of the existing invoice format:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;         UBL-Quotation-2.1-Example.xml: 1864 bytes (gz)&lt;br/&gt;&amp;gt;         UBL-Order-2.1-Example.xml: 2515 bytes (gz)&lt;br/&gt;&amp;gt;         UBL-Invoice-2.1-Example.xml: 3163 bytes (gz)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Indeed, that Quotation alone requires a 32x32 QR code.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; 	However, since invoices/offers and UBL are both structures, we&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; should have an explicit mapping between the two.  What fields should&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; have their own existence in the invoice/offer and what should be in a&lt;br/&gt;&amp;gt;&amp;gt;&amp;gt; general UBL field is a question we have to think on further.&lt;br/&gt;&amp;gt;&amp;gt; I agree that we don&amp;#39;t want duplication. This is the reason, I propose to &lt;br/&gt;&amp;gt;&amp;gt; use only ubl structure and add in the ln standard invoice an ubl &lt;br/&gt;&amp;gt;&amp;gt; &amp;#34;opaque&amp;#34; field which will be self-contained and only add in the &lt;br/&gt;&amp;gt;&amp;gt; invoice/offer/.. the fields specific to ln.&lt;br/&gt;&amp;gt; Except we need to go through the UBL spec and indicate exactly what&lt;br/&gt;&amp;gt; fields are permitted, and which are required.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Many UBI fields are not amenable to machine interpretation (eg. note&lt;br/&gt;&amp;gt; fields).  These must be either explicitly exposed to the buyer (in case&lt;br/&gt;&amp;gt; the seller uses them) such as shipping conditions, or explicitly&lt;br/&gt;&amp;gt; forbidden/ignored.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This is not a small task, and required intimiate knowledge of the UBL&lt;br/&gt;&amp;gt; spec.  It&amp;#39;s not enough just to make something *look* like UBL.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Does anyone have expertise in this area?  Shall we form a sub-group to&lt;br/&gt;&amp;gt; investigate this properly?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thanks!&lt;br/&gt;&amp;gt; Rusty.&lt;br/&gt;&amp;gt;
    </content>
    <updated>2023-06-09T14:57:19&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsqyfxge6dtnxtug4decs43t38ls72e4nx0tg39hu3aty62w849kpczyqfl6pp5c7krqrm6g6994k2xfdaef69s84aw3qje700r4pzz9q306w5ktqs</id>
    
      <title type="html">📅 Original date posted:2019-11-08 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsqyfxge6dtnxtug4decs43t38ls72e4nx0tg39hu3aty62w849kpczyqfl6pp5c7krqrm6g6994k2xfdaef69s84aw3qje700r4pzz9q306w5ktqs" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqst4npdjjrazlals6zz0us0um3gdy6y8306nat7t4zffp00q88nxfcmmrh0c&#39;&gt;nevent1q…rh0c&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-11-08&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Rusty.&lt;br/&gt;&lt;br/&gt;On 08/11/2019 05:09, Rusty Russell wrote:&lt;br/&gt;&amp;gt; Hi Yaacov,&lt;br/&gt;&amp;gt;          I&amp;#39;ve been pondering this since reading your comment on the PR!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;          As a fan of standards, I am attracted to UBL (I&amp;#39;ve chaired an&lt;br/&gt;&amp;gt; OASIS TC in the past and have great respect for them); as a fan of&lt;br/&gt;&amp;gt; simplicity I am not.  Forcing UBL implementation on wallet providers is&lt;br/&gt;&amp;gt; simply not going to happen, whatever I were to propose.&lt;br/&gt;&lt;br/&gt;In fact, using UBL in LN specification is simpler than trying to &lt;br/&gt;understand the semantic of each field needed by businesses. You are &lt;br/&gt;right that using such a standard put the burden into wallet providers &lt;br/&gt;instead of LN developers, but as a wallet (breez) provider, I can say that:&lt;br/&gt;&lt;br/&gt;1) Most money transactions (currently in fiat) are between users and &lt;br/&gt;companies and not between two users. If we want to replace FIAT by &lt;br/&gt;bitcoin, we need to create an infrastructure which can be used by &lt;br/&gt;businesses. That means that LN needs to be able to be integrated easily &lt;br/&gt;into POS systems. So, as a wallet provider who want to help the &lt;br/&gt;transition from fiat to bitcoin, I need to be able to support standards &lt;br/&gt;even if that means that I have to implement using/parsing big and &lt;br/&gt;complicated standards.&lt;br/&gt;&lt;br/&gt;For simple user to user transaction, the wallet can decide to use only a &lt;br/&gt;subset of the fields defined by the standard.&lt;br/&gt;&lt;br/&gt;2) From a technical point of view, it seems that there are already UBL &lt;br/&gt;libraries in java and c#. I don&amp;#39;t think such library is hard to write in &lt;br/&gt;go, rust.., so every wallet implementation can use them.&lt;br/&gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 	We also don&amp;#39;t want duplication; what if the &amp;#34;UBL field&amp;#34; were to&lt;br/&gt;&amp;gt; say I were selling you a bridge for $1 and the description and amount&lt;br/&gt;&amp;gt; fields actually said I was selling you a coffee for $3?&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 	However, since invoices/offers and UBL are both structures, we&lt;br/&gt;&amp;gt; should have an explicit mapping between the two.  What fields should&lt;br/&gt;&amp;gt; have their own existence in the invoice/offer and what should be in a&lt;br/&gt;&amp;gt; general UBL field is a question we have to think on further.&lt;br/&gt;I agree that we don&amp;#39;t want duplication. This is the reason, I propose to &lt;br/&gt;use only ubl structure and add in the ln standard invoice an ubl &lt;br/&gt;&amp;#34;opaque&amp;#34; field which will be self-contained and only add in the &lt;br/&gt;invoice/offer/.. the fields specific to ln.&lt;br/&gt;&amp;gt;          Anyway, you&amp;#39;ll have to bear with me as I read this 172 page&lt;br/&gt;&amp;gt; standard...&lt;br/&gt;&lt;br/&gt;Sure :-)&lt;br/&gt;&lt;br/&gt;BTW, Thanks a lot for your all your work. LN would not have been where &lt;br/&gt;it is without your push.
    </content>
    <updated>2023-06-09T14:57:17&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsfaq3hc6u8lq6qr54e8xy4nnj2yrtqxetnrw7xfq0usdddxnjam2czyqfl6pp5c7krqrm6g6994k2xfdaef69s84aw3qje700r4pzz9q306a3whgm</id>
    
      <title type="html">📅 Original date posted:2019-11-05 📝 Original message: Hi ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsfaq3hc6u8lq6qr54e8xy4nnj2yrtqxetnrw7xfq0usdddxnjam2czyqfl6pp5c7krqrm6g6994k2xfdaef69s84aw3qje700r4pzz9q306a3whgm" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqsqy5j9v6mhx7szxjgwan26674a0cw3hcgstlywathhvweyy9e20hg3uhwpw&#39;&gt;nevent1q…hwpw&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-11-05&lt;br/&gt;📝 Original message:&lt;br/&gt;Hi Rusty,&lt;br/&gt;&lt;br/&gt;It seems that there are two kind of TLV fields in your proposition:&lt;br/&gt;1) LN specific fields like `num_paths` and `payment_preimage`.&lt;br/&gt;2) &amp;#34;Business&amp;#34; fields like `address1` and `currency`.&lt;br/&gt;I understand the need to define and include the first category, but I &lt;br/&gt;don&amp;#39;t think that we need or can define the second category. These fields &lt;br/&gt;already exists in software like crm, erp, etc.. and are well defined by &lt;br/&gt;standard body.&lt;br/&gt;My suggestion is to have a generic field containing well defined &lt;br/&gt;structured and standardized data. See for instance &lt;br/&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/EDIFACT&#34;&gt;https://en.wikipedia.org/wiki/EDIFACT&lt;/a&gt; and/or &lt;br/&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/Universal_Business_Language&#34;&gt;https://en.wikipedia.org/wiki/Universal_Business_Language&lt;/a&gt;.&lt;br/&gt;What do you think?&lt;br/&gt;PS: Sorry for crossposting here and in &lt;br/&gt;&lt;a href=&#34;https://github.com/lightningnetwork/lightning-rfc/pull/694&#34;&gt;https://github.com/lightningnetwork/lightning-rfc/pull/694&lt;/a&gt;&lt;br/&gt;--yas&lt;br/&gt;&lt;br/&gt;On 05/11/2019 06:23, Rusty Russell wrote:&lt;br/&gt;&amp;gt; Hi all,&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;          This took longer than I&amp;#39;d indicated; for that I&amp;#39;m sorry.&lt;br/&gt;&amp;gt; However, this should give us all something to chew on.  I&amp;#39;ve started&lt;br/&gt;&amp;gt; with a draft &amp;#34;BOLT 12&amp;#34; (it might be BOLT 13 by the time it&amp;#39;s finalized&lt;br/&gt;&amp;gt; though!).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I&amp;#39;ve also appended indications where we touch other BOLTs:&lt;br/&gt;&amp;gt; 1. BOLT 7 gains a message/reply system, encoded like htlc onions and&lt;br/&gt;&amp;gt;     failure messages.&lt;br/&gt;&amp;gt; 2. BOLT 11 gains a `q` field for quantity; this avoids changing the&lt;br/&gt;&amp;gt;     description when the user requests an invoice for more than one of something&lt;br/&gt;&amp;gt;     (since changing the description between offer and invoice requires user&lt;br/&gt;&amp;gt;     interaction: it&amp;#39;s the *invoice* which you are committing to).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There&amp;#39;s definite handwaving in here; let&amp;#39;s see if you can find it!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Cheers,&lt;br/&gt;&amp;gt; Rusty.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # BOLT #12: Offer Protocols for Lightning Payments&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; An higher-level, QR-code-ready protocol for dealing with invoices over&lt;br/&gt;&amp;gt; Lightning.  There are two simple flows supported: in one, a user gets&lt;br/&gt;&amp;gt; an offer (`lno...`) and requests an invoice over the lightning&lt;br/&gt;&amp;gt; network, obtaining one (or an error) in reply.  In the other, a user&lt;br/&gt;&amp;gt; gets an invoice request (`lni...`), and sends the invoice over the&lt;br/&gt;&amp;gt; lightning network, retreiving an empty reply.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # Table of Contents&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;    * [Offers](#offers)&lt;br/&gt;&amp;gt;      * [Encoding](#encoding)&lt;br/&gt;&amp;gt;      * [TLV Fields](#tlv-fields)&lt;br/&gt;&amp;gt;    * [Invrequests](#invrequests)&lt;br/&gt;&amp;gt;      * [Encoding](#encoding)&lt;br/&gt;&amp;gt;      * [TLV Fields](#tlv-fields)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # Offers&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Offers supply a reader with enough information to request one or more&lt;br/&gt;&amp;gt; invoices via the lightning network itself.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Encoding&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The human-readable part of a Lightning offer is `lno`.  The data part&lt;br/&gt;&amp;gt; consists of three parts:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. 0 or more [TLV](01-messaging.md#type-length-value-format) encoded fields.&lt;br/&gt;&amp;gt; 2. A 32-byte nodeid[1]&lt;br/&gt;&amp;gt; 3. 64-byte signature of SHA256(hrp-as-utf8 | tlv | nodeid).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## TLV Fields&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The TLV fields define how to get the invoice, and what it&amp;#39;s for.&lt;br/&gt;&amp;gt; Each offer has a unique `offer_idenfitier` so the offering node can&lt;br/&gt;&amp;gt; distinguish different invoice requests.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Offers can request recurring payments of various kinds, and specify&lt;br/&gt;&amp;gt; what base currency they are calculated in (the actual amount will be&lt;br/&gt;&amp;gt; in the invoice).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; `additional_data` is a bitfield which indicates what information the&lt;br/&gt;&amp;gt; invoice requester should (odd) or must (even) supply:&lt;br/&gt;&amp;gt; 1. Bits `0/1`: include `delivery_address`&lt;br/&gt;&amp;gt; 2. Bits `2/3`: include `delivery_telephone_number`&lt;br/&gt;&amp;gt; 3. Bits `4/5`: include `voucher_code`&lt;br/&gt;&amp;gt; 4. Bits `6/7`: include `refund_proof`&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; `refund_for` indicates an offer for a (whole or part) refund for a&lt;br/&gt;&amp;gt; previous invoice, as indicated by the `payment_hash`.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. tlvs: `offer`&lt;br/&gt;&amp;gt; 2. types:&lt;br/&gt;&amp;gt;      1. type: 1 (`paths`)&lt;br/&gt;&amp;gt;      2. data:&lt;br/&gt;&amp;gt;          * [`u16`:`num_paths`]&lt;br/&gt;&amp;gt;          * [`num_paths*path`:`path`]&lt;br/&gt;&amp;gt;      1. type: 2 (`description`)&lt;br/&gt;&amp;gt;      2. data:&lt;br/&gt;&amp;gt;          * [`...*byte`:`description`]&lt;br/&gt;&amp;gt;      1. type: 3 (`expiry`)&lt;br/&gt;&amp;gt;      2. data:&lt;br/&gt;&amp;gt;          * [`tu64`:`seconds_from_epoch`]&lt;br/&gt;&amp;gt;      1. type: 4 (`offer_identifier`)&lt;br/&gt;&amp;gt;      2. data:&lt;br/&gt;&amp;gt;          * [`...*byte`:`id`]&lt;br/&gt;&amp;gt;      1. type: 5 (`amount`)&lt;br/&gt;&amp;gt;      2. data:&lt;br/&gt;&amp;gt;          * [`4*byte`:`currency`]&lt;br/&gt;&amp;gt;          * [`tu64`:`amount`]&lt;br/&gt;&amp;gt;      1. type: 6 (`additional_data`)&lt;br/&gt;&amp;gt;      2. data:&lt;br/&gt;&amp;gt; 	    * [`...*byte`:`rbits`]&lt;br/&gt;&amp;gt;      1. type: 7 (`recurrance`)&lt;br/&gt;&amp;gt;      2. data:&lt;br/&gt;&amp;gt; 	    * [`byte`:`time_unit`]&lt;br/&gt;&amp;gt; 		* [`u32`:`period`]&lt;br/&gt;&amp;gt; 		* [`tu32`:`number`]&lt;br/&gt;&amp;gt;      1. type: 8 (`recurrance_base`)&lt;br/&gt;&amp;gt;      2. data:&lt;br/&gt;&amp;gt; 		* [`u32`:`basetime`]&lt;br/&gt;&amp;gt; 		* [`tu32`:`paywindow`]&lt;br/&gt;&amp;gt;      1. type: 9 (`quantity`)&lt;br/&gt;&amp;gt;      2. data:&lt;br/&gt;&amp;gt; 		* [`tu64`:`max`]&lt;br/&gt;&amp;gt;      1. type: 10 (`refund_for`)&lt;br/&gt;&amp;gt;      2. data:&lt;br/&gt;&amp;gt;          * [`32*byte`:`payment_hash`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. subtype: `path`&lt;br/&gt;&amp;gt; 2. data:&lt;br/&gt;&amp;gt;     * [`u16`:`num_hops`]&lt;br/&gt;&amp;gt;     * [`num_hops*hop`:`hops`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. subtype: `hop`&lt;br/&gt;&amp;gt; 2. data:&lt;br/&gt;&amp;gt;     * [`pubkey`:`nodeid`]&lt;br/&gt;&amp;gt;     * [`short_channel_id`:`short_channel_id`]&lt;br/&gt;&amp;gt;     * [`u16`:`flen`]&lt;br/&gt;&amp;gt;     * [`flen*byte`:`features`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Requirements For Offers And Invrequests&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A writer of an offer or an invrequest:&lt;br/&gt;&amp;gt;    - if it is connected only by private channels:&lt;br/&gt;&amp;gt;      - MUST include `paths` containing a path to the node.&lt;br/&gt;&amp;gt;    - otherwise:&lt;br/&gt;&amp;gt;      - MAY include `paths` containing a path to the node.&lt;br/&gt;&amp;gt;    - MUST describe the item(s) being offered or purpose of invoice in `description`.&lt;br/&gt;&amp;gt;    - MUST include `expiry` if the offer/invrequest will not be valid after some time.&lt;br/&gt;&amp;gt;    - if it includes `expiry`:&lt;br/&gt;&amp;gt;      - MUST set `seconds_from_epoch` to the expiry time in seconds since 1970 UTC.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Requirements For Offers&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A writer of an offer:&lt;br/&gt;&amp;gt;    - MUST use a unique `offer_idenfitier` for each offer.&lt;br/&gt;&amp;gt;    - MAY include `recurrence` to indicate offer should trigger time-spaced&lt;br/&gt;&amp;gt;      invoices.&lt;br/&gt;&amp;gt;    - MUST include `amount` if it includes `recurrence`.&lt;br/&gt;&amp;gt;    - if it includes `amount`:&lt;br/&gt;&amp;gt;      - MUST specify `currency` as the ISO 4712 or BIP-0173, padded with zero bytes if required&lt;br/&gt;&amp;gt; 	- MUST specify `amount` to the amount expected for the invoice, as the ISO 4712 currency unit multiplied by exponent, OR the BIP-0173 minimum unit (eg. `satoshis`).&lt;br/&gt;&amp;gt;    - if it requires specific fields in the invoice:&lt;br/&gt;&amp;gt;      - MUST set the corresponding even bits in the `additional_data` field&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; A reader of an offer:&lt;br/&gt;&amp;gt;    - SHOULD gain user consent for recurring payments.&lt;br/&gt;&amp;gt;    - SHOULD allow user to view and cancel recurring payments.&lt;br/&gt;&amp;gt;    - SHOULD gain user consent to send `delivery_` fields.&lt;br/&gt;&amp;gt;    - if it uses `amount` to provide the user with a cost estimate:&lt;br/&gt;&amp;gt; 	- MUST warn user if amount of actual invoice differs significantly&lt;br/&gt;&amp;gt; 		from that expectation.&lt;br/&gt;&amp;gt;    - FIXME: more!&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Recurrance&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Some offers are *periodic*, such as a subscription service or monthly&lt;br/&gt;&amp;gt; dues, in that payment is expected to be repeated.  There are many&lt;br/&gt;&amp;gt; different flavors of repetition, consider:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * Payments due on the first of every month, for 6 months.&lt;br/&gt;&amp;gt; * Payments due on every Monday, 1pm Pacific Standard Time.&lt;br/&gt;&amp;gt; * Payments due once a year:&lt;br/&gt;&amp;gt;     * which must be made on January 1st, or&lt;br/&gt;&amp;gt;     * which are only valid if started January 1st 2020, or&lt;br/&gt;&amp;gt;     * which if paid after January 1st you (over) pay the full rate first year, or&lt;br/&gt;&amp;gt;     * which if paid after January 1st are paid pro-rata for the first year, or&lt;br/&gt;&amp;gt;     * which repeat from whenever you made the first payment&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Thus, each payment has:&lt;br/&gt;&amp;gt; 1. A `time_unit` defining 0 (seconds), 1 (days), 2 (months), 3 (years).&lt;br/&gt;&amp;gt; 2. A `period`, defining how often (in `time_unit`) it has to be paid.&lt;br/&gt;&amp;gt; 3. An optional `number` of total payments to be paid.&lt;br/&gt;&amp;gt; 4. An optional `basetime`, defining when the first payment applies&lt;br/&gt;&amp;gt;     in seconds since 1970-01-01 UTC.&lt;br/&gt;&amp;gt; 5. An optional `paywindow`, defining how many seconds into the period&lt;br/&gt;&amp;gt;     a payment will be accepted: 0xFFFFFFFF being a special value meaning&lt;br/&gt;&amp;gt;     &amp;#34;any time during the period, but you will have to pay proportionally&lt;br/&gt;&amp;gt;     to the remaining time in the period&amp;#34;.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Note that the `expiry` field covers the case where an offer is no longer&lt;br/&gt;&amp;gt; valid after January 1st 2020.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Default Offer&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The &amp;#34;default offer&amp;#34; of a node is a nominal offer used to send&lt;br/&gt;&amp;gt; unsolicited payments.  It is generally not actually sent, but can be&lt;br/&gt;&amp;gt; used by any other node as if it has been.  It has the following&lt;br/&gt;&amp;gt; fields:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; * `offer_idenfitier`: zero-length&lt;br/&gt;&amp;gt; * `d`: any&lt;br/&gt;&amp;gt; * `n`: the node id of the recipient.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Invoice Request Encoding&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Once it has an offer, the node can request an actual invoice using the&lt;br/&gt;&amp;gt; `invoice_req` message inside `directed`&amp;#39;s `onion_routing_packet`.  It&lt;br/&gt;&amp;gt; would expect an `invoice_or_error_tlv` inside the `directed_reply`&lt;br/&gt;&amp;gt; message.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; This includes a `tag` it can use to identify replies, the&lt;br/&gt;&amp;gt; `offer_idenfitier` from the offer, a `key` it can use to prove it was&lt;br/&gt;&amp;gt; the requester of this invoice, a `recurrence` number if this&lt;br/&gt;&amp;gt; is a payment in a recurring series, and other codes as required.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The `refund_proof` refers to a previous invoice paid by the sender for&lt;br/&gt;&amp;gt; the specific case of a `refund_for` offer.  It provides proof of&lt;br/&gt;&amp;gt; payment (the `payment_preimage` and also a signature of the&lt;br/&gt;&amp;gt; `payment_hash` from the `key` which requested the being-refunded&lt;br/&gt;&amp;gt; invoice (which does *not* have to be the same as this `key`!).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. tlvs: `invoice_request_tlv`&lt;br/&gt;&amp;gt; 2. types:&lt;br/&gt;&amp;gt;     1. type: 1 (`tag`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt;        * [`...*byte`:`tag`]&lt;br/&gt;&amp;gt;     1. type: 2 (`offer_identifier`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt;        * [`...*byte`:`id`]&lt;br/&gt;&amp;gt;     1. type: 3 (`key`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt;       * [`32`:`key`]&lt;br/&gt;&amp;gt;     1. type: 4 (`recurrence`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt;       * [`tu64`:`number`]&lt;br/&gt;&amp;gt;     1. type: 5 (`quantity`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt;       * [`tu64`:`n`]&lt;br/&gt;&amp;gt;     1. type: 6 (`delivery_address_name`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt; 	 * [`...*byte`:`name`]&lt;br/&gt;&amp;gt;     1. type: 7 (`delivery_address1`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt; 	 * [`...*byte`:`address1`]&lt;br/&gt;&amp;gt;     1. type: 8 (`delivery_address2`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt; 	 * [`...*byte`:`address2`]&lt;br/&gt;&amp;gt;     1. type: 9 (`delivery_city`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt; 	 * [`...*byte`:`city`]&lt;br/&gt;&amp;gt;     1. type: 10 (`delivery_state_province_or_region`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt; 	 * [`...*byte`:`state_province_or_region`]&lt;br/&gt;&amp;gt;     1. type: 11 (`delivery_zip_or_postal_code`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt; 	 * [`...*byte`:`zip_or_postal_code`]&lt;br/&gt;&amp;gt;     1. type: 12 (`delivery_country`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt; 	 * [`2*byte`:`country_code`]&lt;br/&gt;&amp;gt;     1. type: 13 (`delivery_telephone_number`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt; 	 * [`...*byte`:`tel`]&lt;br/&gt;&amp;gt;     1. type: 14 (`voucher_code`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt; 	 * [`...*byte`:`code`]&lt;br/&gt;&amp;gt;     1. type: 15 (`refund_proof`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt;        * [`32*byte`:`payment_preimage`]&lt;br/&gt;&amp;gt;        * [`signature`:`signature`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Requirements&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; FIXME: many more&lt;br/&gt;&amp;gt; Sender MUST use ISO 3166 alpha-2 code for `delivery_country`.&lt;br/&gt;&amp;gt; Sender MUST set offer_identifier to match offer.&lt;br/&gt;&amp;gt; Sender MUST include `key`&lt;br/&gt;&amp;gt;     - SHOULD use a transient unpredictable key&lt;br/&gt;&amp;gt;     - MUST reuse key for successive recurring invoices.&lt;br/&gt;&amp;gt; Sender MUST set `recurrence` for recurring invoices.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Receiver MUST check `offer_identifier`&lt;br/&gt;&amp;gt; Receiver MUST check `delivery_` fields.&lt;br/&gt;&amp;gt; Receiver MUST check `recurrence`.&lt;br/&gt;&amp;gt; Receiver MUST check `amount`.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. tlvs: `invoice_or_error_tlv`&lt;br/&gt;&amp;gt; 2. types:&lt;br/&gt;&amp;gt;     1. type: 1 (`tag`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt;       * [`...*byte`:`tag`]&lt;br/&gt;&amp;gt;     1. type: 3 (`omitted`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt; 	 * [`...*u64`:`omitted_fields`]&lt;br/&gt;&amp;gt;     1. type: 4 (`invoice`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt;       * [`...*byte`:`invoice`]&lt;br/&gt;&amp;gt;     1. type: 5 (`message`)&lt;br/&gt;&amp;gt;       * [`...*byte`:`message`]&lt;br/&gt;&amp;gt;     1. type: 6 (`replacement`)&lt;br/&gt;&amp;gt;     2. data:&lt;br/&gt;&amp;gt;       * [`signature`:`signature`]&lt;br/&gt;&amp;gt;       * [`...*byte`:`offer`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Sender:&lt;br/&gt;&amp;gt; - MUST copy `tag` from sender.&lt;br/&gt;&amp;gt; - MUST omit fields it does not use, and place number in order in `omitted_fields`.&lt;br/&gt;&amp;gt; - if it includes `invoice`:&lt;br/&gt;&amp;gt;    - MUST not include `message`&lt;br/&gt;&amp;gt;    - MUST not include `replacement`&lt;br/&gt;&amp;gt;    - MUST [merkle fields it used](#merkle-calculation) and place that in invoice `s` field.&lt;br/&gt;&amp;gt; - otherwise, if it includes `replacement`:&lt;br/&gt;&amp;gt;    - MAY include `message`&lt;br/&gt;&amp;gt; - otherwise:&lt;br/&gt;&amp;gt;    - MUST include `message` describing the error.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Receiver:&lt;br/&gt;&amp;gt; - MUST check that `tag` matches req.&lt;br/&gt;&amp;gt; - if `replacement`:&lt;br/&gt;&amp;gt;    - MUST fail if `signature` does not sign `offer` with same key as original.&lt;br/&gt;&amp;gt;    - MUST only fetch once (no double-redirects!)&lt;br/&gt;&amp;gt; - if description or amount significantly changes, must re-ask user.&lt;br/&gt;&amp;gt;    - SHOULD note if description simply has something appended (eg &amp;#34;&#43; postage&amp;#34;).&lt;br/&gt;&amp;gt; - within invoice:&lt;br/&gt;&amp;gt;      - MUST check that `s` matches merkle of fields, minus `omitted`.&lt;br/&gt;&amp;gt; 	- MUST check that no vital fields are in `omitted`.&lt;br/&gt;&amp;gt; 	- MUST check that `d` matches `description`&lt;br/&gt;&amp;gt;      - MUST check that `q` DNE if `quantity` DNE, otherwise is equal.&lt;br/&gt;&amp;gt;      - Must check valid signature, etc.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Merkle Calculation&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. For each `invoice_req_tlv` field in ascending `tlv` type order:&lt;br/&gt;&amp;gt;     1. If the field was omitted, it is added to `omitted_fields`.&lt;br/&gt;&amp;gt;     2. Otherwise, the immediate parent merkle is:&lt;br/&gt;&amp;gt;     &lt;br/&gt;&amp;gt;        SHA256(SHA256(`tag` | `be64-n`) | SHA256(`tlv-value`))&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;        Where `be64-n` is a 64-bit big-endian counter starting at 0 and&lt;br/&gt;&amp;gt;        incrementing for each leaf.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     3. Order these nodes in increasing SHA256(`tag` | `be64-n`) order.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 2. Create additional leaves until `be64-n` is the next power of 2:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;        SHA256(`tag` | `be64-n`)&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 3. Combine adjacent leaves using SHA256(leaf1 | leaf2) until none remain.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; By creating adjacent leaves using the `tag` field and a counter, and&lt;br/&gt;&amp;gt; sorting the leaves, the only significant information revealed by a&lt;br/&gt;&amp;gt; merkle proof on a node is the depth of tree (which implies the total&lt;br/&gt;&amp;gt; number of TLV fields).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; # InvRequests&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; There are times when it makes sense to request an invoice over another&lt;br/&gt;&amp;gt; medium, such as HTTP or a QR code.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Encoding&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The human-readable part of a Lightning invrequest is `lni`.  The data part&lt;br/&gt;&amp;gt; consists of three parts:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. 0 or more [TLV](01-messaging.md#type-length-value-format) encoded fields.&lt;br/&gt;&amp;gt; 2. A 32-byte nodeid[1]&lt;br/&gt;&amp;gt; 3. 64-byte signature of SHA256(hrp-as-utf8 | tlv | nodeid).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## TLV Fields&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. tlvs: `invreq`&lt;br/&gt;&amp;gt; 2. types:&lt;br/&gt;&amp;gt;      1. type: 1 (`paths`)&lt;br/&gt;&amp;gt;      2. data:&lt;br/&gt;&amp;gt;          * [`u16`:`num_paths`]&lt;br/&gt;&amp;gt;          * [`num_paths*path`:`path`]&lt;br/&gt;&amp;gt;      1. type: 2 (`description`)&lt;br/&gt;&amp;gt;      2. data:&lt;br/&gt;&amp;gt;          * [`...*byte`:`description`]&lt;br/&gt;&amp;gt;      1. type: 3 (`expiry`)&lt;br/&gt;&amp;gt;      2. data:&lt;br/&gt;&amp;gt;          * [`tu64`:`seconds_from_epoch`]&lt;br/&gt;&amp;gt;      1. type: 4 (`amount`)&lt;br/&gt;&amp;gt;      2. data:&lt;br/&gt;&amp;gt;          * [`tu64`:`millisatoshis`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The fields `paths`, `description`, and `expiry` fields are the&lt;br/&gt;&amp;gt; same as those for offers; the optional `amount` field describes the&lt;br/&gt;&amp;gt; amount an invoice will be accepted for.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Upon parsing and accepting an `invreq`, the node sends an&lt;br/&gt;&amp;gt; `invoice_or_error_tlv` within an onion.  The reply is empty.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Requirements&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The requirements for `paths`, `description` and `expiry` are&lt;br/&gt;&amp;gt; [described above](#requirements-for-offers-and-invrequests).&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; FIXME: More.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; [1] Assuming we go for Schnorr sigs and 32-byte pubkeys.&lt;br/&gt;&amp;gt; ----&lt;br/&gt;&amp;gt; Addendum: BOLT #7: P2P Node and Channel Discovery and Directed Messages&lt;br/&gt;&amp;gt; ...&lt;br/&gt;&amp;gt; # Directed Messages&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Directed messages allow peers to use existing connections to query for&lt;br/&gt;&amp;gt; invoices (see [BOLT 12](12-offer-encoding.md)).  Like gossip messages,&lt;br/&gt;&amp;gt; they are not associated with a particular local channel.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; The `id` is a unique, transient identifier between the peers, used to&lt;br/&gt;&amp;gt; identify match messages and replies.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## The `directed` and `directed_reply` Messages&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. type: 384 (`directed`) (`option_directed_messages`)&lt;br/&gt;&amp;gt; 2. data:&lt;br/&gt;&amp;gt;      * [`chain_hash`:`chain_hash`]&lt;br/&gt;&amp;gt;      * [`u64`:`id`]&lt;br/&gt;&amp;gt;      * [`1366*byte`:`onion_routing_packet`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; 1. type: 384 (`directed_reply`) (`option_directed_messages`)&lt;br/&gt;&amp;gt; 2. data:&lt;br/&gt;&amp;gt;      * [`chain_hash`:`chain_hash`]&lt;br/&gt;&amp;gt;      * [`u64`:`id`]&lt;br/&gt;&amp;gt;      * [`u16`:`len`]&lt;br/&gt;&amp;gt;      * [`len*byte`:`reply`]&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; ## Requirements&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; FIXME: similar to update_add_htlc and update_fail_htlc.&lt;br/&gt;&amp;gt; FIXME: define reasonable timeout after which you can forget if not replied?&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;
    </content>
    <updated>2023-06-09T14:57:16&#43;02:00</updated>
  </entry>

  <entry>
    <id>https://nostr.ae/nevent1qqsrj4aphm5vk42jwgkthafu9cqarrjcv69xe9e3jey5hlyc0ntq70gzyqfl6pp5c7krqrm6g6994k2xfdaef69s84aw3qje700r4pzz9q3066hxesh</id>
    
      <title type="html">📅 Original date posted:2019-11-09 📝 Original message: ...</title>
    
    <link rel="alternate" href="https://nostr.ae/nevent1qqsrj4aphm5vk42jwgkthafu9cqarrjcv69xe9e3jey5hlyc0ntq70gzyqfl6pp5c7krqrm6g6994k2xfdaef69s84aw3qje700r4pzz9q3066hxesh" />
    <content type="html">
      In reply to &lt;a href=&#39;/nevent1qqswjgytkqcrz0k7mpgt9kklfn9xjeu90288fpz3caeu9a00zxrhetc0gug0c&#39;&gt;nevent1q…ug0c&lt;/a&gt;&lt;br/&gt;_________________________&lt;br/&gt;&lt;br/&gt;📅 Original date posted:2019-11-09&lt;br/&gt;📝 Original message:&lt;br/&gt;[Sorry: re-sending again in plain text]&lt;br/&gt;&lt;br/&gt;On 08/11/2019 16:15, Joost Jager wrote:&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     &amp;gt;     The goal of this pre-payment proposal is to remove the need for&lt;br/&gt;&amp;gt;     &amp;gt;     trusted parties&lt;br/&gt;&amp;gt;     &amp;gt;&lt;br/&gt;&amp;gt;     &amp;gt; Trust isn&amp;#39;t the right word. It is a level of service that you&lt;br/&gt;&amp;gt;     provide&lt;br/&gt;&amp;gt;     &amp;gt; to your peers. If nodes are cognizant of the fact that the level of&lt;br/&gt;&amp;gt;     &amp;gt; service they receive goes down if they forward spam, they will be&lt;br/&gt;&amp;gt;     &amp;gt; careful on the incoming side. Require peers to build up a&lt;br/&gt;&amp;gt;     reputation&lt;br/&gt;&amp;gt;     &amp;gt; before increasing the inbound limits that apply to the channels&lt;br/&gt;&amp;gt;     with them. &lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;     We can learn from the current situation in emails, that a system&lt;br/&gt;&amp;gt;     based&lt;br/&gt;&amp;gt;     on reputation tends to concentrate the power in the hands of few&lt;br/&gt;&amp;gt;     big and&lt;br/&gt;&amp;gt;     strong actors (gmail and co). If we have from the beginning a&lt;br/&gt;&amp;gt;     mechanism&lt;br/&gt;&amp;gt;     to fight against spam by paying to send message, we can perhaps&lt;br/&gt;&amp;gt;     have a&lt;br/&gt;&amp;gt;     really distributed system which cannot be censured.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; Can you elaborate on this a bit further? If you consider rate limiting&lt;br/&gt;&amp;gt; to be a form of censoring, then you can still censor if there is a prepay.&lt;br/&gt;There are situations when lot of people need to send each other lot of&lt;br/&gt;messages in a small period of time, in protests for instance. In this&lt;br/&gt;case, people are ready to pay a little to communicate. It&amp;#39;s true that&lt;br/&gt;they can be censored even when paying for messaging, but in this case,&lt;br/&gt;it&amp;#39;s a voluntary (and politic) decision. But when using a rate limiting&lt;br/&gt;mechanism, it&amp;#39;s an economic decision with politic implications.&lt;br/&gt;&amp;gt;&lt;br/&gt;&amp;gt; I am not too familiar with the current state of email servers, to what&lt;br/&gt;&amp;gt; extent power is concentrated now and how that evolution translates to&lt;br/&gt;&amp;gt; Lightning.&lt;br/&gt;&lt;br/&gt;Currently, if you install a smtp server in you home computer or in a&lt;br/&gt;server you rent and you try to send an email to someone with an email&lt;br/&gt;from any big provider, it will be marked as spam, because you need to&lt;br/&gt;have a good &amp;#34;reputation&amp;#34;. And if you try to send so called &amp;#34;marketing&amp;#34;&lt;br/&gt;emails, you&amp;#39;ll be marked as spammer even if the same emails sent by big&lt;br/&gt;providers are not rejected. This is the effect of using any reputation&lt;br/&gt;system. The path from reputation to propaganda is very short.&lt;br/&gt;&lt;br/&gt;&amp;gt; One difference is that afaik emails don&amp;#39;t traverse a path through&lt;br/&gt;&amp;gt; multiple mail &amp;#34;nodes&amp;#34;. Another is that inboxes of users are very&lt;br/&gt;&amp;gt; centralized (gmail and co).&lt;br/&gt;&lt;br/&gt;I can imagine a system where people who want to use the messaging system&lt;br/&gt;based on Lightning will have to open a channel to big nodes in order to&lt;br/&gt;be able to reach their recipient. In this case, those big nodes can&lt;br/&gt;censor as they want because they have access to a lot of metadata.
    </content>
    <updated>2023-06-09T14:57:13&#43;02:00</updated>
  </entry>

</feed>