Bisq: Add feature to cancel a trade

Created on 27 Jun 2020  路  9Comments  路  Source: bisq-network/bisq

Description

Add the ability for either party in an active trade to cancel it. This was proposed by @chimp1984 here:

Ideas to combat "future trades": add a "cancel trade" button which would cause the mediator to make a suggested payout where the "future trader" gets a small part of his deposit back but a larger part goes to the peer. If he would not get anything back he has no incentive to "cooperate".
I think as long those more simple steps are not implemented we should no try to do the much harder work like trying to introduce a new trade protocol.

Reasons a trader might want to cancel:

  • unable to make their fiat payment.
  • price has moved against them (as discussed, the future trade issue).

Penalties:

  • Whoever presses Cancel would cause 75% of their security deposit to be refunded to the other party.

Availability:

  • Cancel will only be available before payment has been initiated.
  • Cancel will be shown near the Open Trader Chat button.
  • An "are you sure Y/N" message provides full details of the costs of canceling.
  • As with any mediation, both trade parties would have to agree to the payout suggestion. If they disagree, then trade follows normal path (completes, or goes to arbitrator).
  • Technically this is no different than opening a mediation case, but by having the Cancel button makes it much clearer to the users that they have this option and what the costs of canceling are. It also makes it clearer to the Mediator what has happened.

I have opened this issue with an eye to implementing it. Looking for consensus/feedback first.


Examples

  • Alice makes offer to sell 1 BTC for USD (1.0 + 0.15 deposit)
  • Bob takes offer to buy 1 BTC from Alice (0.15 deposit)
  • Alice changes her mind, presses cancel
  • Mediation suggested payout: Alice's 0.15 security deposit is split 0.0375 Alice / 0.1125 Bob
  • In total Alice would get back 1.0375, Bob would get back 0.2625

  • Alice makes offer to sell 1 BTC for USD (1.0 + 0.15 deposit)
  • Bob takes offer to buy 1 BTC from Alice (0.15 deposit)
  • Bob changes his mind, presses cancel
  • trade goes into mediation
  • Bob's 0.15 security deposit is split 0.0375 to Bob, 0.1125 to Alice
  • In total Bob would get back 0.0375, Alice would get back 1.2625

  • Bob makes offer to buy 0.01 BTC with EUR (0.006 deposit)
  • Charlie takes offer to sell 0.01 BTC to Bob (0.01 + 0.006 deposit)
  • Bob has issues with his bank, so presses cancel
  • trade goes into mediation
  • Bob's 0.006 security deposit is split 0.0015 to Bob, 0.0045 to Charlie

    * In total Bob would get back 0.0015, Charlie would get back 0.0205

  • Bob makes offer to buy 0.01 BTC with EUR (0.006 deposit)

  • Charlie takes offer to sell 0.01 BTC to Bob (0.01 + 0.006 deposit)
  • Charlie changes his mind, presses cancel
  • trade goes into mediation
  • Charlie's 0.006 security deposit is split 0.0015 to Charlie, 0.0045 to Bob
  • In total Charlie would get back 0.0115, Bob would get back 0.0105

Most helpful comment

Consider that the deposit is variable and 15% is the minimum, and I'm working on a feature to suggest a deposit depending on volatility. Perhaps it's correct to have the penalty vary according to the deposit, it would be in accordance with the perceived risk of the trade.

The cancel fee should be less than the expected fee of a mediation to promote the usage of cancel rather than taking cases to mediation.

All 9 comments

I think this would save us a lot of mediation cases, completely agree. Thank you.

Consider that the deposit is variable and 15% is the minimum, and I'm working on a feature to suggest a deposit depending on volatility. Perhaps it's correct to have the penalty vary according to the deposit, it would be in accordance with the perceived risk of the trade.

The cancel fee should be less than the expected fee of a mediation to promote the usage of cancel rather than taking cases to mediation.

Consider that the deposit is variable and 15% is the minimum, and I'm working on a feature to suggest a deposit depending on volatility.

Yes please. Variable and decided by maker. 100% max possible.

End goal: as BUY BTC maker - I want to flag to sellers - 100% security deposit. Even if the price tanks after I have commenced a trade (not yet paid fiat), I go through with the trade. I would suspect BTC sellers and buyers would want to deal with folks who keep their word, regardless of outcome. _I do._ How annoying to enter a trade, have your offer taken, the market goes whatever way and old mate wants to cancel?

I want my BTC buy offers to be seen as trustworthy and risk free. How can I encourage that? Is there a way to count/show how many times an account has had cancellations? Or no. of trades?

I have no interest in cancelling trades and if Bisq becomes nothing but folks cancelling trades, wasting my time (regardless of the deposit in favour), it's a bad outcome for the platform imo.

Again, this should be a DAO proposal, not an issue, but for now my initial thoughts are that often times buyers claim they are unable to make the payment to the seller, and in this case they would not want to lose their deposit for what could be the fault of the bank being able to make the payment for some reason, or the fault of the seller for providing incorrect payment account details. I noticed the number of buyers claiming they are unable to pay the seller increases whenever the price of bitcoin goes down suddenly, what an amazing coincidence, right? So as a mediator, it seems I need to require some proof of payment failure, which might be difficult to enforce.

To summarize the work on this so far has been largely driven by the comments above.

  1. initial implementation was to use the mediation framework, enhancing it to include indication that the user requested a cancel and suggesting the distribution of his deposit as shown. This would have involved the mediator.
  2. second implementation was to try and automate the cancel so that if the cancelee agreed it would payout accordingly. This was using mediation messaging but not involving the mediator GUI.
  3. third implementation was to start from scratch, making the cancel request/response an integral part of the trading protocol. User A would request to cancel, knowing that they will forfeit part of their security deposit. User B would receive an popup requesting he accept or decline the cancel. If he declined then it would fallback to opening a mediator ticket.

tldr; Gut feel after having used the workflow is that upon seeing the penalty amounts, most users would not want to go ahead with it. So I can agree somewhat with Wiz' comment above that mediation works better.

I can agree somewhat with Wiz' comment above that mediation works better.

Huh? Mediation is not better than traders resolving their trade between themselves. How on earth did you get that out of my comment?

Obviously we should eliminate reasons for users to use mediation, and the cancel trade feature is badly needed. We just need to consider all the things traders will try to do.

I noticed the number of buyers claiming they are unable to pay the seller increases whenever the price of bitcoin goes down suddenly, what an amazing coincidence, right?

It would be a nice feature to see the price difference from the take offer time to the open dispute time. That would help the mediators to determine the chance that it was a future trade or not. Also with altcoins I think there are nearly no reasons that the payment could not be done (no fucking banks included). As with fiat the mediator can request page signed docs of the bank statement (failed attempted transfer). Incorrect sellers data should be easier to proof (seller can proof previous trades or pagesigned doc with dank details). Just to request page-signed doc can add enough pressure that lying becomes less frequent. But sure at the end with fiat there is always some uncertainty and to punish innocent traders hurts.

To summarize the work on this so far has been largely driven by the comments above.

1. initial implementation was to use the mediation framework, enhancing it to include indication that the user requested a cancel and suggesting the distribution of his deposit as shown.  This would have involved the mediator.

2. second implementation was to try and automate the cancel so that if the cancelee agreed it would payout accordingly.  This was using mediation messaging but not involving the mediator GUI.

3. third implementation was to start from scratch, making the cancel request/response an integral part of the trading protocol.  User A would request to cancel, knowing that they will forfeit part of their security deposit.  User B would receive an popup requesting he accept or decline the cancel.  If he declined then it would fallback to opening a mediator ticket.

tldr; Gut feel after having used the workflow is that upon seeing the penalty amounts, most users would not want to go ahead with it. So I can agree somewhat with Wiz' comment above that mediation works better.

I would suggest to add a button next to the "open dispute" button which opens a popup with details about the partially lost security deposit (I think 75% might be a good value to incentivise the feature over lying to mediators). If user confirms popup warning he sends a message to the peer. This message is technically the same like the suggested payout message of the mediator but need to be handled differently so I suggest to add a new message type. The peer gets that message and the logic is similar like to mediated payout message but need different textual content. So peer gets a popup with info that the other trader wants to cancel the trade and is willing to give 75% of his deposit (shown in BTC value) to him for reimbursing for the lost trade opportunity. To show also the price difference from take offer time to cancel event and show BTC value of that would be good as well. There might be cases where price move was not the motivation so accepting cancelation would be more likely if that is seen.
Implementation of new messages need to handle backward compatibility. @sqrrm and @ripcurlx have experience how to deal with that. It might be non-trivial...

As designed above (cancel trade) is a simplistic "I fucked up, here take my money and call it quits" approach.

Mediation works better because it is more flexible both in negotiation and payout.

@burningman2 Thanks - what you describe above is exactly what I implemented. Having tried it I think it is inflexible and would not be used because users think they are losing a lot of money and can get a better deal from mediation.


My current thoughts:
For users to resolve the trade between themselves, allow them to negotiate, sign/publish their 2 of 2 payout transaction using amounts that they agree upon. Could be implemented by adding functionality to the trader chat GUI. Should I open a DAO proposal for that @wiz ?

Was this page helpful?
0 / 5 - 0 ratings