Andy Schroder [ARCHIVE] on Nostr: 📅 Original date posted:2018-03-21 📝 Original message: Andy Schroder On ...
📅 Original date posted:2018-03-21
📝 Original message:
Andy Schroder
On 03/19/2018 08:06 AM, Corné Plooy wrote:
>> What about enforcing a maximum payment amount that can be refunded?
>> Can this help make the amount not a requirement? This way the payment
>> amount will still be open to the payer, but it will have a constraint.
> I see no use case anymore for leaving out the amount in the invoice. For
> any type of transaction where the payer decides the amount, he can do so
> by specifying the amount in the invoice request.
Maybe you are right.
>
>>>> 3. True. Right now I'm thinking in the opposite direction:
>>>> simplifying
>>>> BOLT 12 by removing the possibility of refunds. We can
>>>> always add it
>>>> back later (with a proper set of features for all kinds of
>>>> refunds) as
>>>> an optional feature.
>>
>> I want my refund :-) !
> I did some further thinking on refunds. Generally speaking, they are a
> solution for when Transactions Get Messy, right? You agreed to a
> transaction, the Lightning payment happened, but now you want to change
> something. That 'something' can be, for instance, a full refund (e.g. if
> goods cannot be delivered), a partial refund (e.g. if goods arrived
> later than agreed, or with inferior quality), an extra payment by the
> payer (e.g. cheaper model out of stock, decided to buy the more
> expensive one instead), or no payment at all (e.g. payer changes mind
> after the payment, and wants the black/blue model instead of the
> white/gold one, which has the same price).
Did you take a look a the application in my link? It demonstrates paying
for fuel for an automobile with bitcoin using blockchain payments. There
is first a payment and then the pump powers on. After the person
finishes dispensing fuel into their vehicle, it immediately places a
refund transaction using the refund address received using the BIP70
payment protocol. It even uses NFC and bluetooth instead of QR codes and
http. Most automobile owners have to go through this payment process
every 5-15 days if they buy fuel with cash. It's not really a messy
transaction and their is no any way to know with much accuracy how much
fuel they actually need since fuel level gauges in automobiles aren't
very inaccurate. And, you can always be filling up some cans of unknown
size to take back and refill your tractor, generator, boat, or whatever.
This is a situation where you shouldn't need to divulge your identity to
make a trivial purchase of a commodity.
Other common examples include making a deposit for a hotel. Normally you
need to put something up far beyond the cost of the room rental in order
to cover any damages you could make to the room. Same goes for renting
anything really. There are many other little cases where you may need to
place a deposit greater than the cost of the good/service you are receiving.
>
> There is some similarity between a "BOLT 12" transaction that allows
> refunds and other updates, and a microtransaction channel. Specifically,
> I think you want the new state to be signed by whoever may possibly have
> a legitimate interest *against* the update, and you want the old state
> to be invalidated. In BOLT 12, to support this, a state should typically
> contain the description field, a field that invalidates the previous
> state, a field that specifies how this state can be invalidated, and
> optionally a payment hash(*), which indicates that this state update is
> valid only in combination with the corresponding preimage. A transaction
> starts in a "null" state (no obligations between participants), and ends
> specifying certain obligations that have been fulfilled. TBD: maybe
> returning to null state by signing off that all obligations have been
> fulfilled? E.g. payer signing off that ordered goods have been received.
> Note that this must be different from canceling the transaction, since
> you want the payer to keep some kind of proof of ownership. Anyway, I
> think returning to null state should not be required on BOLT12 protocol
> level: not everybody wants this. Some suppliers may want to require it
> though.
>
> Looking at the protocol for this (generalized) refund usage, it seems
> clear that, often, you don't want to have to keep the communication line
> open the entire time: it can take days, weeks or longer until the final
> settlement of a transaction. You should be able to reconnect (typically
> in the same direction as the initial connect) and say "hey, let's update
> the state of the transaction to this-or-that". So, on re-connecting, you
> also need to be able to specify *which* transaction to update.
Makes sense.
>
> The format of the "description" field is unspecified for now; I think
> it's best to keep it that way. Machine-readable formats for this are a
> very complex subject, better solved at a higher level protocol. For now,
> assume it to be human-readable; maybe add a MIME type field so that its
> format is both unambiguous (technologically) and upgradeable.
>
> TBD: is there a use case for transactions between more than two parties?
> Or having smart contract (scriptless?) scripts? These would then
> typically be evaluated by a settlement service provider (e.g. the legal
> system) instead of a block chain.
Interesting thought.
>
>> All return onions still have the same problem of capacity though.
> A partial onion is a very generic solution. If capacity is your greatest
> concern as payee, you just supply a zero-hop partial onion. Minimum
> privacy, but maximum ability of the payer to construct a route over
> channels with sufficient capacity. The choice is yours.
>
>>>> 4. This depends on the use case. The URL contains an optional
>>>> invoice
>>>> ID. A payee can request a payment for a specific, single
>>>> transaction
>>>> (for a single instance of delivery of goods/services) by
>>>> handing over an
>>>> URL, including an invoice ID, to a single payer. This
>>>> provides similar
>>>> functionality as BOLT 11, except that you now have a
>>>> well-defined
>>>> channel for transmitting larger invoice descriptions and
>>>> for using
>>>> partial onion routes. A payee can also hand over an URL
>>>> without invoice
>>>> ID; this can be used and re-used by one or more payers,
>>>> whenever they
>>>> want to perform payments to this payee.
>>> How does the payer derive the payment hash? Or does the payer have to
>>> contact the payee again to get a fresh payment hash specifically for
>>> the payer?
> Contact the payee again. Or, more generally, one of them knows how to
> contact the other to propose updates to the agreement; if the payee of
> the update agrees, he will provide the payment hash.
>
> CJP
>
> (*) together with amount and timeout: these allow the payer to know
> under what conditions the payee is likely to release the preimage.
>
>
>
Published at
2023-06-09 12:49:28Event JSON
{
"id": "818bbbfe211ebb917e92fe26acf4bd93ac193d12f2cce50ac57d4c7223462ac7",
"pubkey": "1c7d4637a4686939cc8b4a759caace11bb63bafb75b73b6f57d7ba81f9bd6a6c",
"created_at": 1686314968,
"kind": 1,
"tags": [
[
"e",
"11c536497bcf985878c543cbcdb276cfa91376a0e509480644da8561a93e013b",
"",
"root"
],
[
"e",
"d8e584a8435c6230cb29dcd0641a45eecd7f2eeef5f75aa6ac646eea0e40be33",
"",
"reply"
],
[
"p",
"f928c1a284fddb630ed23aab2bfe69811423a59f41dd8c3e40c57b916fbadf65"
]
],
"content": "📅 Original date posted:2018-03-21\n📝 Original message:\nAndy Schroder\n\nOn 03/19/2018 08:06 AM, Corné Plooy wrote:\n\u003e\u003e What about enforcing a maximum payment amount that can be refunded?\n\u003e\u003e Can this help make the amount not a requirement? This way the payment\n\u003e\u003e amount will still be open to the payer, but it will have a constraint.\n\u003e I see no use case anymore for leaving out the amount in the invoice. For\n\u003e any type of transaction where the payer decides the amount, he can do so\n\u003e by specifying the amount in the invoice request.\n\nMaybe you are right.\n\n\n\n\u003e\n\u003e\u003e\u003e\u003e 3. True. Right now I'm thinking in the opposite direction:\n\u003e\u003e\u003e\u003e simplifying\n\u003e\u003e\u003e\u003e BOLT 12 by removing the possibility of refunds. We can\n\u003e\u003e\u003e\u003e always add it\n\u003e\u003e\u003e\u003e back later (with a proper set of features for all kinds of\n\u003e\u003e\u003e\u003e refunds) as\n\u003e\u003e\u003e\u003e an optional feature.\n\u003e\u003e\n\u003e\u003e I want my refund :-) !\n\u003e I did some further thinking on refunds. Generally speaking, they are a\n\u003e solution for when Transactions Get Messy, right? You agreed to a\n\u003e transaction, the Lightning payment happened, but now you want to change\n\u003e something. That 'something' can be, for instance, a full refund (e.g. if\n\u003e goods cannot be delivered), a partial refund (e.g. if goods arrived\n\u003e later than agreed, or with inferior quality), an extra payment by the\n\u003e payer (e.g. cheaper model out of stock, decided to buy the more\n\u003e expensive one instead), or no payment at all (e.g. payer changes mind\n\u003e after the payment, and wants the black/blue model instead of the\n\u003e white/gold one, which has the same price).\n\nDid you take a look a the application in my link? It demonstrates paying \nfor fuel for an automobile with bitcoin using blockchain payments. There \nis first a payment and then the pump powers on. After the person \nfinishes dispensing fuel into their vehicle, it immediately places a \nrefund transaction using the refund address received using the BIP70 \npayment protocol. It even uses NFC and bluetooth instead of QR codes and \nhttp. Most automobile owners have to go through this payment process \nevery 5-15 days if they buy fuel with cash. It's not really a messy \ntransaction and their is no any way to know with much accuracy how much \nfuel they actually need since fuel level gauges in automobiles aren't \nvery inaccurate. And, you can always be filling up some cans of unknown \nsize to take back and refill your tractor, generator, boat, or whatever. \nThis is a situation where you shouldn't need to divulge your identity to \nmake a trivial purchase of a commodity.\n\nOther common examples include making a deposit for a hotel. Normally you \nneed to put something up far beyond the cost of the room rental in order \nto cover any damages you could make to the room. Same goes for renting \nanything really. There are many other little cases where you may need to \nplace a deposit greater than the cost of the good/service you are receiving.\n\n\n\u003e\n\u003e There is some similarity between a \"BOLT 12\" transaction that allows\n\u003e refunds and other updates, and a microtransaction channel. Specifically,\n\u003e I think you want the new state to be signed by whoever may possibly have\n\u003e a legitimate interest *against* the update, and you want the old state\n\u003e to be invalidated. In BOLT 12, to support this, a state should typically\n\u003e contain the description field, a field that invalidates the previous\n\u003e state, a field that specifies how this state can be invalidated, and\n\u003e optionally a payment hash(*), which indicates that this state update is\n\u003e valid only in combination with the corresponding preimage. A transaction\n\u003e starts in a \"null\" state (no obligations between participants), and ends\n\u003e specifying certain obligations that have been fulfilled. TBD: maybe\n\u003e returning to null state by signing off that all obligations have been\n\u003e fulfilled? E.g. payer signing off that ordered goods have been received.\n\u003e Note that this must be different from canceling the transaction, since\n\u003e you want the payer to keep some kind of proof of ownership. Anyway, I\n\u003e think returning to null state should not be required on BOLT12 protocol\n\u003e level: not everybody wants this. Some suppliers may want to require it\n\u003e though.\n\u003e\n\u003e Looking at the protocol for this (generalized) refund usage, it seems\n\u003e clear that, often, you don't want to have to keep the communication line\n\u003e open the entire time: it can take days, weeks or longer until the final\n\u003e settlement of a transaction. You should be able to reconnect (typically\n\u003e in the same direction as the initial connect) and say \"hey, let's update\n\u003e the state of the transaction to this-or-that\". So, on re-connecting, you\n\u003e also need to be able to specify *which* transaction to update.\n\nMakes sense.\n\n\u003e\n\u003e The format of the \"description\" field is unspecified for now; I think\n\u003e it's best to keep it that way. Machine-readable formats for this are a\n\u003e very complex subject, better solved at a higher level protocol. For now,\n\u003e assume it to be human-readable; maybe add a MIME type field so that its\n\u003e format is both unambiguous (technologically) and upgradeable.\n\u003e\n\u003e TBD: is there a use case for transactions between more than two parties?\n\u003e Or having smart contract (scriptless?) scripts? These would then\n\u003e typically be evaluated by a settlement service provider (e.g. the legal\n\u003e system) instead of a block chain.\n\nInteresting thought.\n\n\n\n\u003e\n\u003e\u003e All return onions still have the same problem of capacity though.\n\u003e A partial onion is a very generic solution. If capacity is your greatest\n\u003e concern as payee, you just supply a zero-hop partial onion. Minimum\n\u003e privacy, but maximum ability of the payer to construct a route over\n\u003e channels with sufficient capacity. The choice is yours.\n\u003e\n\u003e\u003e\u003e\u003e 4. This depends on the use case. The URL contains an optional\n\u003e\u003e\u003e\u003e invoice\n\u003e\u003e\u003e\u003e ID. A payee can request a payment for a specific, single\n\u003e\u003e\u003e\u003e transaction\n\u003e\u003e\u003e\u003e (for a single instance of delivery of goods/services) by\n\u003e\u003e\u003e\u003e handing over an\n\u003e\u003e\u003e\u003e URL, including an invoice ID, to a single payer. This\n\u003e\u003e\u003e\u003e provides similar\n\u003e\u003e\u003e\u003e functionality as BOLT 11, except that you now have a\n\u003e\u003e\u003e\u003e well-defined\n\u003e\u003e\u003e\u003e channel for transmitting larger invoice descriptions and\n\u003e\u003e\u003e\u003e for using\n\u003e\u003e\u003e\u003e partial onion routes. A payee can also hand over an URL\n\u003e\u003e\u003e\u003e without invoice\n\u003e\u003e\u003e\u003e ID; this can be used and re-used by one or more payers,\n\u003e\u003e\u003e\u003e whenever they\n\u003e\u003e\u003e\u003e want to perform payments to this payee.\n\u003e\u003e\u003e How does the payer derive the payment hash? Or does the payer have to\n\u003e\u003e\u003e contact the payee again to get a fresh payment hash specifically for\n\u003e\u003e\u003e the payer?\n\u003e Contact the payee again. Or, more generally, one of them knows how to\n\u003e contact the other to propose updates to the agreement; if the payee of\n\u003e the update agrees, he will provide the payment hash.\n\u003e\n\u003e CJP\n\u003e\n\u003e (*) together with amount and timeout: these allow the payer to know\n\u003e under what conditions the payee is likely to release the preimage.\n\u003e\n\u003e\n\u003e",
"sig": "f4711a2a8f1cb023c338dbe662492ea34d23297d31b5cc38d3e72e228b501687aa80c56b5b8ec0c1c55f405ec29433c4a516f6eb2764ba809e4f266b8ca75490"
}