[bisq-network/bisq] Trade protocol domain improvements (#4566)

chimp1984 notifications at github.com
Sun Sep 27 06:46:52 UTC 2020


To fix the issues with missing delayed payout tx I added a automatic re-send of the relevant message and changed the order of the tasks so that the deposit tx is not published if the message was not ACKed from the peer.

Another major change is to remove all automated handling of failed trades and show instead a warn icon in the open trades list. The user can then click on a button to move the trade to failed trades. A popup gives detail info about the failure and instructions. From failed trades there is also a button to move the trade back to pending trades.
The trade details window shows now always all 4 trade txs and if one is missing it sets the text color to red and shows a warn icon. 

Beside that there have been fixed various edge case bugs. 

This PR comes also with some major refactorings. The trade protocol got a new fluent interface so it is more readable.
Example:
```
 public void onPaymentStarted(ResultHandler resultHandler, ErrorMessageHandler errorMessageHandler) {
        BuyerEvent event = BuyerEvent.PAYMENT_SENT;
        expect(phase(Trade.Phase.DEPOSIT_CONFIRMED)
                .with(event)
                .preCondition(notDisputed()))
                .setup(tasks(ApplyFilter.class,
                        getVerifyPeersFeePaymentClass(),
                        BuyerSignPayoutTx.class,
                        BuyerSetupPayoutTxListener.class,
                        BuyerSendCounterCurrencyTransferStartedMessage.class)
                        .using(new TradeTaskRunner(trade,
                                () -> {
                                    resultHandler.handleResult();
                                    handleTaskRunnerSuccess(event);
                                },
                                (errorMessage) -> {
                                    errorMessageHandler.handleErrorMessage(errorMessage);
                                    handleTaskRunnerFault(event, errorMessage);
                                })))
                .run(() -> trade.setState(Trade.State.BUYER_CONFIRMED_IN_UI_FIAT_PAYMENT_INITIATED))
                .executeTasks();
    }
```

For testing error case there is a debug tool which let any selected task fail. With cmd+ z and devMode enabled it opens. 
As the PR has tons of code changes it will require proper testing of all trade protocol and dispute related use cases, specially cases with the other peer being offline.
I have tested quite a lot but have not tested backward compatibility yet. I am not aware that there should be any issue, but it should be tested as well.
Review will be a bit challenging as there are so many changes, but I think a proper testing should be enough. 

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

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

-- Commit Summary --

  * Always show deposit and delayed payout tx in trade details window. If null it shows N/A
  * Show popup on MissingDelayedPayoutTxException. Update display string of popup
  * Refactor:
  * Refactor:
  * Refactor:
  * Cleanups. Small functional change by removing wrapping into arraylist
  * Remove Nullable annotations. arbitratorNodeAddress is not null and accountAgeWitnessSignatureOfOfferId
  * Refactor: Rename sig to accountAgeWitnessSignatureOfOfferId to make context more clear
  * Refactor: rename inputsForDepositTxRequest to request
  * Revert removal of Nullable. arbitratorNodeAddress is null (confused it with acceptedArbitratorNodeAddresses)
  * Use ApplyFilter at start at take offer process.
  * Refactor: Remove final
  * Remove check that account age signature can be null. Such old versions are not supported anymore.
  * Refactoring: cleanups, add more checkNotNull tests
  * Refactoring: cleanups
  * Refactoring: cleanups
  * Unsubscribe before state is set to avoid duplicate calls
  * Refactoring: rename inputsForDepositTxResponse , add more checkNotNull checks
  * Refactoring: cleanups
  * Remove repeated TakerVerifyMakerAccount and TakerVerifyMakerFeePayment from taker protocol
  * Refactor: set string at success handlers correctly
  * Move stopTimeout to second message handler
  * Move contractHash creation to TakerVerifyAndSignContract
  * Refactoring: cleanups
  * Refactoring: cleanups
  * Refactoring: cleanups
  * Remove empty task runner
  * Refactoring: cleanups
  * Move contractHash creation to MakerCreateAndSignContract
  * Refactoring: cleanups, rename cleanupTradableOnFault
  * Move SellerPublishesDepositTx after SellerSendsDepositTxAndDelayedPayoutTxMessage
  * Add listener on BuyerSendCounterCurrencyTransferStartedMessage to resend msg case it has not arrived
  * Don't return null if name is null by try to use UNDEFINED. Only if that is not present we return null
  * Resend DepositTxAndDelayedPayoutTxMessage at
  * Change order of tasks
  * Use same model as in SellerSendsDepositTxAndDelayedPayoutTxMessage
  * Add checks for state at handle CounterCurrencyTransferStartedMessage
  * Refactoring: rename, cleanups
  * Remove empty tasks.
  * Add BuyerSendCounterCurrencyTransferStartedMessage as second optional task instead of starting a new task runner
  * Change isTradeInPhase APi to fluent interface with ifInPhase
  * Use ifInPhase APi for testing expected phase(s)
  * Use fluent interface for checking state and conditions
  * Merge branch 'dispute-agent-branch' into wip-merge-tradeprot
  * Remove empty file (from merge)
  * Various improvements
  * Refactor: Rename condition to preCondition
  * Refactor: Rename from to expectedPhase
  * Refactor: Rename fromAny to expectedPhases
  * Use FluentProcess for boilerplate code (WIP - some custom code is commented out atm, will be fixed in follow up commits)
  * Refactor: Rename run to runTasks
  * Add run method to accept runnable which is execute before run tasks
  * Redesigned fluent API again...
  * Change BuyerProtocol from interface to abstract class
  * Change SellerProtocol from interface to abstract class
  * Refactor: Rename takeAvailableOffer to onTakeOffer
  * Refactor: Rename createTrade to getNewTrade
  * Refactor: Move mediation code to new class
  * Refactor: Rearrange methods
  * Fix potential bug with peers pub key check. Use new isPubKeyValid method to avoid code duplication.
  * Remove handling of failed trades. If a trade is in an invalid state (tx missing) or has an error message set we show in the pending trades view a red trash icon for moving the trade to failed trades.
  * Add warn icon next to trash icon. Show popup with info about the problem and instructions.
  * Add check if trade has been paid out for button disable state
  * Set takerFeeTxId and depositTx in trade only once they are published. Before that we keep it temporary in the processModel.
  * improve trade details window
  * Add MakerRemovesOpenOffer task.
  * Merge branch 'dispute-agent-branch' into fix-delayed-payout-tx-issues
  * Update tasks in debugview
  * Fix deposit tx setters
  * Fix incorrect getDepositTx calls
  * Bug fix: we created a new address entry which causes bugs in case a user takes an offer again which failed in an early preparation state before.
  * Rename given method to expect to make it more clear that it is mandatory that the condition is met. Also added a protocol error handler if the condition is not met.
  * Add check if trade was already taken in the past. If so show a popup at take offer screen.
  * Rename onFiatPaymentReceived to onPaymentReceived
  * Rename onFiatPaymentStarted to onPaymentStarted
  * Remove onPaymentReceived method from TradeManager
  * Refactor: use getTradableList instead of tradableList.getList()
  * Refactor: rename getTradableList to getTradesAsObservableList
  * Refactor: add TODOs
  * Apply fluent protocol to MediationProtocol
  * Rename InputsForDepositTxRequest to TakeOfferRequest
  * Refactor:
  * Refactor: Move method
  * Refactor: let TradeManager implement DecryptedDirectMessageListener, DecryptedMailboxListener
  * Refactor: Remove handleTakeOfferRequest method
  * Refactor: Remove onOfferRemovedFromRemoteOfferBook method
  * Refactor: Remove onCancelAvailabilityRequest method
  * Refactor: Cleanups
  * Refactor: Move methods, rename methods
  * Refactor: return early
  * Refactor: Move getAddressEntriesForAvailableBalanceStream to btcWalletService
  * Refactor: Move publishDelayedPayoutTx from TradeManager to MediationProtocol
  * Refactor: Use task runner for peer publish delayed payout tx
  * Refactor: Rename MediationProtocol to DisputeProtocol
  * Remove precondition as trade was added at that moment
  * Add ProcessModelServiceProvider to provide all the domain services to process model
  * Refactor: rename methods
  * Remove unused method
  * Refactor: move method, remove unneeded stream call
  * Add check to not add a duplicate address entry with same offer ID and context.
  * Remove handleTakeOfferRequest delegate method in maker trade
  * Remove onTakeOffer delegate method in taker trade
  * Remove onPaymentStarted delegate method in buyer trade
  * Remove onPaymentReceived delegate method in seller trade
  * Make some fields in ProcessModel final.
  * Remove timeouts as it was not used before.
  * Remove never read field
  * Apply code inspection suggestions
  * Remove offer at close to avoid that button stays active when taking the offer
  * Refactor: improve logs
  * Refactor: improve logs
  * Allow also  Trade.Phase.PAYOUT_PUBLISHED in onPaymentReceived to support in failure situations to resend the msg
  * DO not deactivate move to failed trades button. Use different text in popup if all txs are valid.
  * Fix bug with showing popup once arbitration has been started
  * Make processModel in Trade final and pass in constructor instead of in init method
  * Remove TradeProtocol from Trade
  * Move handling of mailbox messages from TradeManager to TradeProtocol
  * Add state listeners to warn icon columns to get correct state updates
  * Merge branch 'master_upstream' into fix-delayed-payout-tx-issues

-- File Changes --

    M common/src/main/java/bisq/common/proto/ProtoUtil.java (9)
    M core/src/main/java/bisq/core/account/sign/SignedWitnessService.java (45)
    M core/src/main/java/bisq/core/account/witness/AccountAgeWitnessService.java (71)
    M core/src/main/java/bisq/core/account/witness/AccountAgeWitnessUtils.java (2)
    M core/src/main/java/bisq/core/app/BisqExecutable.java (2)
    M core/src/main/java/bisq/core/app/BisqSetup.java (3)
    M core/src/main/java/bisq/core/btc/Balances.java (4)
    M core/src/main/java/bisq/core/btc/model/AddressEntryList.java (22)
    M core/src/main/java/bisq/core/btc/wallet/BtcWalletService.java (37)
    M core/src/main/java/bisq/core/btc/wallet/TradeWalletService.java (1)
    M core/src/main/java/bisq/core/notifications/alerts/TradeEvents.java (4)
    M core/src/main/java/bisq/core/presentation/TradePresentation.java (3)
    M core/src/main/java/bisq/core/proto/network/CoreNetworkProtoResolver.java (4)
    M core/src/main/java/bisq/core/support/dispute/mediation/MediationManager.java (10)
    M core/src/main/java/bisq/core/support/traderchat/TraderChatManager.java (2)
    M core/src/main/java/bisq/core/trade/BuyerAsMakerTrade.java (32)
    M core/src/main/java/bisq/core/trade/BuyerAsTakerTrade.java (31)
    M core/src/main/java/bisq/core/trade/BuyerTrade.java (25)
    M core/src/main/java/bisq/core/trade/Contract.java (6)
    M core/src/main/java/bisq/core/trade/DumpDelayedPayoutTx.java (4)
    M core/src/main/java/bisq/core/trade/MakerTrade.java (7)
    M core/src/main/java/bisq/core/trade/SellerAsMakerTrade.java (30)
    M core/src/main/java/bisq/core/trade/SellerAsTakerTrade.java (31)
    M core/src/main/java/bisq/core/trade/SellerTrade.java (25)
    M core/src/main/java/bisq/core/trade/TakerTrade.java (1)
    M core/src/main/java/bisq/core/trade/TradableList.java (7)
    M core/src/main/java/bisq/core/trade/Trade.java (234)
    M core/src/main/java/bisq/core/trade/TradeManager.java (788)
    M core/src/main/java/bisq/core/trade/failed/FailedTradesManager.java (17)
    M core/src/main/java/bisq/core/trade/messages/PayoutTxPublishedMessage.java (43)
    M core/src/main/java/bisq/core/trade/messages/RefreshTradeStateRequest.java (26)
    R core/src/main/java/bisq/core/trade/messages/TakeOfferRequest.java (71)
    M core/src/main/java/bisq/core/trade/messages/TraderSignedWitnessMessage.java (5)
    M core/src/main/java/bisq/core/trade/protocol/BuyerAsMakerProtocol.java (239)
    M core/src/main/java/bisq/core/trade/protocol/BuyerAsTakerProtocol.java (260)
    M core/src/main/java/bisq/core/trade/protocol/BuyerProtocol.java (171)
    A core/src/main/java/bisq/core/trade/protocol/DisputeProtocol.java (212)
    A core/src/main/java/bisq/core/trade/protocol/FluentProtocol.java (380)
    M core/src/main/java/bisq/core/trade/protocol/MakerProtocol.java (6)
    M core/src/main/java/bisq/core/trade/protocol/ProcessModel.java (246)
    A core/src/main/java/bisq/core/trade/protocol/ProcessModelServiceProvider.java (93)
    M core/src/main/java/bisq/core/trade/protocol/SellerAsMakerProtocol.java (245)
    M core/src/main/java/bisq/core/trade/protocol/SellerAsTakerProtocol.java (226)
    M core/src/main/java/bisq/core/trade/protocol/SellerProtocol.java (141)
    M core/src/main/java/bisq/core/trade/protocol/TakerProtocol.java (6)
    M core/src/main/java/bisq/core/trade/protocol/TradeProtocol.java (530)
    A core/src/main/java/bisq/core/trade/protocol/TradeProtocolFactory.java (40)
    M core/src/main/java/bisq/core/trade/protocol/tasks/ApplyFilter.java (14)
    M core/src/main/java/bisq/core/trade/protocol/tasks/BroadcastPayoutTx.java (3)
    M core/src/main/java/bisq/core/trade/protocol/tasks/ProcessPeerPublishedDelayedPayoutTxMessage.java (6)
    M core/src/main/java/bisq/core/trade/protocol/tasks/PublishTradeStatistics.java (52)
    A core/src/main/java/bisq/core/trade/protocol/tasks/SendMailboxMessageTask.java (100)
    D core/src/main/java/bisq/core/trade/protocol/tasks/SendPayoutTxPublishedMessage.java (98)
    M core/src/main/java/bisq/core/trade/protocol/tasks/SetupPayoutTxListener.java (3)
    M core/src/main/java/bisq/core/trade/protocol/tasks/TradeTask.java (2)
    M core/src/main/java/bisq/core/trade/protocol/tasks/VerifyPeersAccountAgeWitness.java (69)
    A core/src/main/java/bisq/core/trade/protocol/tasks/arbitration/PublishedDelayedPayoutTx.java (71)
    R core/src/main/java/bisq/core/trade/protocol/tasks/arbitration/SendPeerPublishedDelayedPayoutTxMessage.java (49)
    M core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerProcessDelayedPayoutTxSignatureRequest.java (17)
    M core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerProcessDepositTxAndDelayedPayoutTxMessage.java (30)
    M core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerProcessPayoutTxPublishedMessage.java (14)
    M core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerSendCounterCurrencyTransferStartedMessage.java (189)
    M core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerSendsDelayedPayoutTxSignatureResponse.java (7)
    M core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerSetupDepositTxListener.java (38)
    M core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerSetupPayoutTxListener.java (6)
    M core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerSignPayoutTx.java (3)
    M core/src/main/java/bisq/core/trade/protocol/tasks/buyer/BuyerSignsDelayedPayoutTx.java (9)
    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)
    M core/src/main/java/bisq/core/trade/protocol/tasks/buyer_as_maker/BuyerAsMakerCreatesAndSignsDepositTx.java (24)
    M core/src/main/java/bisq/core/trade/protocol/tasks/buyer_as_maker/BuyerAsMakerSendsInputsForDepositTxResponse.java (3)
    M core/src/main/java/bisq/core/trade/protocol/tasks/buyer_as_taker/BuyerAsTakerCreatesDepositTxInputs.java (5)
    M core/src/main/java/bisq/core/trade/protocol/tasks/buyer_as_taker/BuyerAsTakerSendsDepositTxMessage.java (13)
    M core/src/main/java/bisq/core/trade/protocol/tasks/buyer_as_taker/BuyerAsTakerSignsDepositTx.java (5)
    M core/src/main/java/bisq/core/trade/protocol/tasks/maker/MakerCreateAndSignContract.java (37)
    M core/src/main/java/bisq/core/trade/protocol/tasks/maker/MakerProcessesInputsForDepositTxRequest.java (56)
    R core/src/main/java/bisq/core/trade/protocol/tasks/maker/MakerRemovesOpenOffer.java (21)
    M core/src/main/java/bisq/core/trade/protocol/tasks/maker/MakerSendsInputsForDepositTxResponse.java (27)
    M core/src/main/java/bisq/core/trade/protocol/tasks/maker/MakerSetsLockTime.java (11)
    M core/src/main/java/bisq/core/trade/protocol/tasks/maker/MakerVerifyTakerFeePayment.java (3)
    M core/src/main/java/bisq/core/trade/protocol/tasks/mediation/BroadcastMediatedPayoutTx.java (3)
    M core/src/main/java/bisq/core/trade/protocol/tasks/mediation/FinalizeMediatedPayoutTx.java (3)
    M core/src/main/java/bisq/core/trade/protocol/tasks/mediation/ProcessMediatedPayoutSignatureMessage.java (4)
    M core/src/main/java/bisq/core/trade/protocol/tasks/mediation/ProcessMediatedPayoutTxPublishedMessage.java (4)
    M core/src/main/java/bisq/core/trade/protocol/tasks/mediation/SendMediatedPayoutSignatureMessage.java (3)
    M core/src/main/java/bisq/core/trade/protocol/tasks/mediation/SendMediatedPayoutTxPublishedMessage.java (13)
    M core/src/main/java/bisq/core/trade/protocol/tasks/mediation/SetupMediatedPayoutTxListener.java (3)
    M core/src/main/java/bisq/core/trade/protocol/tasks/mediation/SignMediatedPayoutTx.java (3)
    M core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerBroadcastPayoutTx.java (3)
    M core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerCreatesDelayedPayoutTx.java (5)
    M core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerFinalizesDelayedPayoutTx.java (6)
    M core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerProcessCounterCurrencyTransferStartedMessage.java (5)
    M core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerProcessDelayedPayoutTxSignatureResponse.java (14)
    M core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerPublishesDepositTx.java (16)
    M core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerSendDelayedPayoutTxSignatureRequest.java (7)
    M core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerSendPayoutTxPublishedMessage.java (39)
    M core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerSendsDepositTxAndDelayedPayoutTxMessage.java (195)
    M core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerSignAndFinalizePayoutTx.java (3)
    M core/src/main/java/bisq/core/trade/protocol/tasks/seller/SellerSignsDelayedPayoutTx.java (6)
    M core/src/main/java/bisq/core/trade/protocol/tasks/seller_as_maker/SellerAsMakerCreatesUnsignedDepositTx.java (3)
    M core/src/main/java/bisq/core/trade/protocol/tasks/seller_as_maker/SellerAsMakerFinalizesDepositTx.java (5)
    M core/src/main/java/bisq/core/trade/protocol/tasks/seller_as_maker/SellerAsMakerProcessDepositTxMessage.java (11)
    M core/src/main/java/bisq/core/trade/protocol/tasks/seller_as_maker/SellerAsMakerSendsInputsForDepositTxResponse.java (3)
    M core/src/main/java/bisq/core/trade/protocol/tasks/seller_as_taker/SellerAsTakerCreatesDepositTxInputs.java (37)
    M core/src/main/java/bisq/core/trade/protocol/tasks/seller_as_taker/SellerAsTakerSignsDepositTx.java (28)
    M core/src/main/java/bisq/core/trade/protocol/tasks/taker/CreateTakerFeeTx.java (21)
    M core/src/main/java/bisq/core/trade/protocol/tasks/taker/TakerProcessesInputsForDepositTxResponse.java (44)
    M core/src/main/java/bisq/core/trade/protocol/tasks/taker/TakerPublishFeeTx.java (56)
    M core/src/main/java/bisq/core/trade/protocol/tasks/taker/TakerSendInputsForDepositTxRequest.java (84)
    M core/src/main/java/bisq/core/trade/protocol/tasks/taker/TakerVerifyAndSignContract.java (37)
    M core/src/main/java/bisq/core/trade/protocol/tasks/taker/TakerVerifyMakerFeePayment.java (3)
    M core/src/main/java/bisq/core/trade/statistics/TradeStatistics2.java (2)
    M core/src/main/java/bisq/core/trade/statistics/TradeStatistics2Store.java (2)
    M core/src/main/java/bisq/core/trade/statistics/TradeStatisticsManager.java (2)
    M core/src/main/java/bisq/core/trade/txproof/xmr/XmrTxProofService.java (9)
    M core/src/main/java/bisq/core/util/Validator.java (6)
    M core/src/main/resources/i18n/displayStrings.properties (78)
    M core/src/test/java/bisq/core/account/sign/SignedWitnessServiceTest.java (4)
    M core/src/test/java/bisq/core/account/witness/AccountAgeWitnessServiceTest.java (2)
    M desktop/src/main/java/bisq/desktop/bisq.css (32)
    M desktop/src/main/java/bisq/desktop/components/HyperlinkWithIcon.java (7)
    M desktop/src/main/java/bisq/desktop/components/TxIdTextField.java (34)
    M desktop/src/main/java/bisq/desktop/main/MainViewModel.java (21)
    M desktop/src/main/java/bisq/desktop/main/account/content/altcoinaccounts/AltCoinAccountsDataModel.java (2)
    M desktop/src/main/java/bisq/desktop/main/account/content/fiataccounts/FiatAccountsDataModel.java (4)
    M desktop/src/main/java/bisq/desktop/main/debug/DebugView.java (145)
    M desktop/src/main/java/bisq/desktop/main/funds/locked/LockedView.java (4)
    M desktop/src/main/java/bisq/desktop/main/funds/reserved/ReservedView.java (4)
    M desktop/src/main/java/bisq/desktop/main/funds/transactions/TradableRepository.java (2)
    M desktop/src/main/java/bisq/desktop/main/funds/withdrawal/WithdrawalView.java (33)
    M desktop/src/main/java/bisq/desktop/main/offer/offerbook/OfferBook.java (3)
    M desktop/src/main/java/bisq/desktop/main/offer/takeoffer/TakeOfferDataModel.java (52)
    M desktop/src/main/java/bisq/desktop/main/offer/takeoffer/TakeOfferView.java (68)
    M desktop/src/main/java/bisq/desktop/main/offer/takeoffer/TakeOfferViewModel.java (5)
    M desktop/src/main/java/bisq/desktop/main/overlays/notifications/NotificationCenter.java (4)
    M desktop/src/main/java/bisq/desktop/main/overlays/windows/TradeDetailsWindow.java (106)
    M desktop/src/main/java/bisq/desktop/main/portfolio/failedtrades/FailedTradesDataModel.java (14)
    M desktop/src/main/java/bisq/desktop/main/portfolio/failedtrades/FailedTradesView.fxml (1)
    M desktop/src/main/java/bisq/desktop/main/portfolio/failedtrades/FailedTradesView.java (65)
    M desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesDataModel.java (71)
    M desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesView.fxml (3)
    M desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesView.java (259)
    M desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesViewModel.java (2)
    M desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/steps/TradeStepView.java (27)
    M desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/steps/buyer/BuyerStep2View.java (12)
    M desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/steps/buyer/BuyerStep4View.java (4)
    M desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/steps/seller/SellerStep2View.java (60)
    M desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/steps/seller/SellerStep3View.java (3)
    M desktop/src/main/java/bisq/desktop/util/FormBuilder.java (4)
    M p2p/src/main/java/bisq/network/p2p/P2PService.java (13)
    M proto/src/main/proto/pb.proto (19)

-- Patch Links --

https://github.com/bisq-network/bisq/pull/4566.patch
https://github.com/bisq-network/bisq/pull/4566.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/4566
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.bisq.network/pipermail/bisq-github/attachments/20200926/9039ef0f/attachment-0001.html>


More information about the bisq-github mailing list