[bisq-network/bisq] Atomic trade (#4414)

sqrrm notifications at github.com
Mon Aug 17 16:21:11 UTC 2020


This PR implements a new account type, Atomic BSQ with a separate trade protocol.

Atomic trade protocol is completed in one request -> response interaction between taker and maker.
1. Taker sends a CreateAtomicTxRequest to maker. This includes all the data needed to create and sign the atomic tx from maker's side.
1. Maker verifies all inputs and answers with CreateAtomicTxResponse that includes an atomic tx with maker's inputs signed.
1. Taker verifies the inputs and that their own outputs are paid as expected, signs and publishes the completed atomic tx.
1. Fin

![image](https://user-images.githubusercontent.com/23560607/90417270-c3fb1000-e0b3-11ea-8738-994ca02fffdc.png)
There is still a minimum 15% deposit to avoid messing around too much with current trade protocol. It's not actually needed since the trade is an atomic transaction, but I leave that as a future improvement.

![image](https://user-images.githubusercontent.com/23560607/90418137-03762c00-e0b5-11ea-92be-acabbbf9b337.png)
Can't be taken by an old client since the account type doesn't exist

![image](https://user-images.githubusercontent.com/23560607/90418256-2bfe2600-e0b5-11ea-8d71-42e896c3a507.png)
Take with new client, requires to have the deposit, but it's not used apart from checking that it's available during the take offer process.

![image](https://user-images.githubusercontent.com/23560607/90418602-9dd66f80-e0b5-11ea-9176-90d8ab511a2a.png)
Trade completes immediately.

![image](https://user-images.githubusercontent.com/23560607/90418800-ebeb7300-e0b5-11ea-8e3f-5cfd7394cbb4.png)
![image](https://user-images.githubusercontent.com/23560607/90418670-b8104d80-e0b5-11ea-803b-4be5ff5ad160.png)
Shows in transactions as atomic

![image](https://user-images.githubusercontent.com/23560607/90418865-002f7000-e0b6-11ea-8e8f-e1d62b430a4b.png)
![image](https://user-images.githubusercontent.com/23560607/90418766-dbd39380-e0b5-11ea-9125-2414d384d266.png)
Need a confirmation before it can show the type of BSQ tx

![image](https://user-images.githubusercontent.com/23560607/90418952-1e956b80-e0b6-11ea-90a5-1319287ea91c.png)
![image](https://user-images.githubusercontent.com/23560607/90418966-248b4c80-e0b6-11ea-8d9a-78a5ceabd2f6.png)
After confirmation

You can view, comment on, or merge this pull request online at:

  https://github.com/bisq-network/bisq/pull/4414

-- Commit Summary --

  * Refactor: extract DonationAddressValidation
  * Add atomic account type
  * Add atomic trade protocol messages
  * Add atomic tx fee estimation
  * Add BSQ specific input signing
  * Add walletservice helpers for atomic trade protocol
  * Add atomic trade protocol
  * Add UI for atomic trade
  * Move protocol failed texts to displaystrings

-- File Changes --

    M core/src/main/java/bisq/core/btc/TxFeeEstimationService.java (12)
    M core/src/main/java/bisq/core/btc/wallet/BsqWalletService.java (128)
    M core/src/main/java/bisq/core/btc/wallet/BtcWalletService.java (64)
    M core/src/main/java/bisq/core/btc/wallet/TradeWalletService.java (175)
    M core/src/main/java/bisq/core/btc/wallet/WalletService.java (4)
    A core/src/main/java/bisq/core/payment/AtomicAccount.java (37)
    M core/src/main/java/bisq/core/payment/PaymentAccountFactory.java (2)
    A core/src/main/java/bisq/core/payment/payload/AtomicAccountPayload.java (57)
    M core/src/main/java/bisq/core/payment/payload/PaymentMethod.java (14)
    M core/src/main/java/bisq/core/proto/CoreProtoResolver.java (3)
    M core/src/main/java/bisq/core/proto/network/CoreNetworkProtoResolver.java (6)
    M core/src/main/java/bisq/core/trade/BuyerAsMakerTrade.java (9)
    M core/src/main/java/bisq/core/trade/DelayedPayoutTxValidation.java (65)
    A core/src/main/java/bisq/core/trade/DonationAddressValidation.java (101)
    M core/src/main/java/bisq/core/trade/MakerTrade.java (8)
    M core/src/main/java/bisq/core/trade/SellerAsMakerTrade.java (14)
    M core/src/main/java/bisq/core/trade/Trade.java (16)
    M core/src/main/java/bisq/core/trade/TradeManager.java (65)
    A core/src/main/java/bisq/core/trade/messages/CreateAtomicTxRequest.java (194)
    A core/src/main/java/bisq/core/trade/messages/CreateAtomicTxResponse.java (89)
    A core/src/main/java/bisq/core/trade/protocol/AtomicMakerProtocol.java (54)
    A core/src/main/java/bisq/core/trade/protocol/AtomicModel.java (144)
    A core/src/main/java/bisq/core/trade/protocol/AtomicTakerProtocol.java (47)
    M core/src/main/java/bisq/core/trade/protocol/BuyerAsMakerProtocol.java (3)
    M core/src/main/java/bisq/core/trade/protocol/BuyerAsTakerProtocol.java (32)
    M core/src/main/java/bisq/core/trade/protocol/MakerProtocol.java (4)
    M core/src/main/java/bisq/core/trade/protocol/ProcessModel.java (8)
    M core/src/main/java/bisq/core/trade/protocol/SellerAsMakerProtocol.java (2)
    M core/src/main/java/bisq/core/trade/protocol/SellerAsTakerProtocol.java (27)
    M core/src/main/java/bisq/core/trade/protocol/TradeProtocol.java (12)
    A core/src/main/java/bisq/core/trade/protocol/tasks/AtomicSetupTxListener.java (105)
    M core/src/main/java/bisq/core/trade/protocol/tasks/PublishTradeStatistics.java (5)
    M core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java (3)
    M core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java (3)
    A core/src/main/java/bisq/core/trade/protocol/tasks/maker/AtomicMakerCreatesAndSignsTx.java (119)
    A core/src/main/java/bisq/core/trade/protocol/tasks/maker/AtomicMakerSetupTxListener.java (67)
    A core/src/main/java/bisq/core/trade/protocol/tasks/maker/AtomicMakerVerifiesTakerInputs.java (154)
    A core/src/main/java/bisq/core/trade/protocol/tasks/taker/AtomicTakerPublishesAtomicTx.java (87)
    A core/src/main/java/bisq/core/trade/protocol/tasks/taker/AtomicTakerSendsAtomicRequest.java (131)
    A core/src/main/java/bisq/core/trade/protocol/tasks/taker/AtomicTakerSetupTxListener.java (67)
    A core/src/main/java/bisq/core/trade/protocol/tasks/taker/AtomicTakerVerifiesAtomicTx.java (199)
    M core/src/main/java/bisq/core/user/User.java (18)
    M core/src/main/resources/i18n/displayStrings.properties (30)
    M desktop/src/main/java/bisq/desktop/bisq.css (5)
    M desktop/src/main/java/bisq/desktop/main/account/content/fiataccounts/FiatAccountsDataModel.java (2)
    M desktop/src/main/java/bisq/desktop/main/dao/wallet/tx/BsqTxListItem.java (17)
    M desktop/src/main/java/bisq/desktop/main/dao/wallet/tx/BsqTxView.java (24)
    M desktop/src/main/java/bisq/desktop/main/funds/transactions/TradableRepository.java (2)
    M desktop/src/main/java/bisq/desktop/main/funds/transactions/TransactionAwareTrade.java (7)
    M desktop/src/main/java/bisq/desktop/main/funds/transactions/TransactionsListItem.java (15)
    M desktop/src/main/java/bisq/desktop/main/offer/takeoffer/TakeOfferView.java (3)
    M desktop/src/main/java/bisq/desktop/main/offer/takeoffer/TakeOfferViewModel.java (23)
    M desktop/src/main/java/bisq/desktop/main/overlays/windows/SignPaymentAccountsWindow.java (2)
    M desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesViewModel.java (1)
    M desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/steps/buyer/BuyerStep1View.java (3)
    M desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/steps/buyer/BuyerStep2View.java (3)
    M desktop/src/main/java/bisq/desktop/util/GUIUtil.java (2)
    M proto/src/main/proto/pb.proto (37)

-- Patch Links --

https://github.com/bisq-network/bisq/pull/4414.patch
https://github.com/bisq-network/bisq/pull/4414.diff

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/bisq-network/bisq/pull/4414
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.bisq.network/pipermail/bisq-github/attachments/20200817/3358b394/attachment-0001.html>


More information about the bisq-github mailing list