Commit graph

13250 commits

Author SHA1 Message Date
Christoph Atteneder
94453cf27c
Merge pull request #4829 from chimp1984/prevent-downgrade
Check if user has downgraded to an older version
2020-11-24 09:15:47 +01:00
Christoph Atteneder
2e51805eb3
Merge pull request #4840 from oscarguindzberg/fixBitcoinSync
Upgrade bitcoinj to commit 60b4f2f
2020-11-24 09:11:39 +01:00
chimp1984
6b3a002b1c
Add 1 sec delay before calling exit
To persist in the very last moment before exit might cause problems on some OS.
We do not have confirmed that this might be an issue but to be on the safe side
we add a 1 sec. delay between persistence completed and exit.
2020-11-23 18:22:44 -05:00
Oscar Guindzberg
e667f8fbad
Upgrade bitcoinj to commit 60b4f2f 2020-11-23 14:39:26 -03:00
jmacxx
395af3c4c8
Prompt for confirmation before initiating SPV resync
Allows user to back off if invoked by accident.
2020-11-23 11:37:31 -06:00
ghubstan
c88543848d
Fix minor error & help msg bugs 2020-11-23 12:06:57 -03:00
Christoph Atteneder
06a7d6fb14
Update translations for v1.5.0 (update 2) 2020-11-23 11:23:25 +01:00
Christoph Atteneder
dd55beabac
Update data stores for v1.5.0 (update 2) 2020-11-23 11:23:15 +01:00
Christoph Atteneder
06c16a1734
Update bitcoinj checkpoints for v1.5.0 (update 2) 2020-11-23 11:23:04 +01:00
Christoph Atteneder
3c944722e9
Merge pull request #4831 from jmacxx/json_dump_active_currencies
Create JSON files of actively traded crypto and fiat assets
2020-11-23 09:46:13 +01:00
ghubstan
ab5780e0e1
Print 'no offers found' msg in CLI if list is empty 2020-11-22 18:58:43 -03:00
ghubstan
08d56733a8
Fix getbalance out bug in CLI
Running the bats test exposed a bug that shows BSQ and BTC balance
info no matter what currency code argument is passed to the server.
2020-11-22 16:54:24 -03:00
ghubstan
daeb34b3d2
Add two new api method tests
Keeping the bats test simple.  More complex use cases are tested in
apitest, and we don't want to be trading on mainnet with a bats test.

- Add new getunusedbsqaddress test, assert success return status.
- Add new getpaymentmethods test, assert success return status.
2020-11-22 16:25:21 -03:00
ghubstan
424f9480ad
Fix broken tests
- Change the getbalance tests to just check a sucessful '0' status code.

  The api's getbalance method returns full balance info now, not just a
  formatted long.  We still assert the cmd did not fail, but don't check
  the value string.

- Remove obsolete createpaymentacct tests.

  This is well tested in apitest, and testing this cmd is unnecesarily
  complex to do in a bats script.
2020-11-22 16:12:34 -03:00
jmacxx
53a90f9d17
create JSON files of actively traded crypto and fiat assets 2020-11-21 23:23:16 -06:00
ghubstan
76097fc9dc
Enable CreateMoneyGramAccount test 2020-11-21 15:24:33 -03:00
ghubstan
23bfa2e7fc
Refactor didReadCountryField to set country on MoneyGram acct
MoneyGram is not a CountryBasedPaymentAccount, but it does
have a country field.
2020-11-21 15:22:15 -03:00
ghubstan
636fac9170
Add isMoneyGramAccount to abstract PaymentAccount 2020-11-21 15:21:10 -03:00
chimp1984
9360e89ae8
Check if user has downgraded to an older version. If so require shutdown
and do not read or write persisted data.

We had recently a case where a user downgraded from 1.4.2 to 1.3.9 and
this caused failed trades and the wallet funds have been missing due to
some complexities of the wallet wegwit upgrade. The fund could be recovered
but it took quite some effort.
As downgrade is never tested and can lead to all kind of weird bugs we
should prevent that users accidentally can do it.
If there is valid reason to downgrade they can remove the version file.
2020-11-20 15:27:50 -05:00
chimp1984
df9ef80edf
Avoid nullpointer 2020-11-20 15:10:39 -05:00
ghubstan
bb6762a23e
Reverse argument order for assert(expected, actual) convention 2020-11-20 16:53:59 -03:00
ghubstan
459b2a9c49
Add create payment account (api) tests 2020-11-20 16:46:36 -03:00
Christoph Atteneder
779c059a51
Merge pull request #4827 from chimp1984/fix-typo
Fix typo
2020-11-20 18:40:02 +01:00
chimp1984
9da231ed8b
Fix typo 2020-11-20 10:28:59 -05:00
ghubstan
58f1af6f45
Log server stack traces, pass concise err msgs to CLI
For exceptions caught in the server, we want to log a reason and a
full stack trace, then send less verbose exception msgs up to the CLI.
2020-11-20 12:00:22 -03:00
Christoph Atteneder
2fe702cf3d
Merge pull request #4825 from huey735/rename-trade-payout-option
Rename getsAll payout option string
2020-11-20 09:49:59 +01:00
Christoph Atteneder
741425fad8
Merge pull request #4789 from stejbac/fix-remaining-blackmail-vulnerabilities
Fix remaining blackmail vulnerabilities
2020-11-19 19:01:06 +01:00
Huey
604a64e4a5
Rename getsAll payout option string
Renamed it to better represent the outcome of this option since
the winning party doesn't in fact get all the funds in escrow.
2020-11-19 17:41:39 +00:00
Steven Barclay
345426fb50
Add further validation checks for delayed payout tx
Do some extra sanity checks like tx.outputSum < tx.inputSum, to rule out
any edge cases where an invalid delayed payout tx might still arise.
2020-11-19 17:30:16 +00:00
Steven Barclay
3574204e7d
Fix faulty signature check in finalizeDelayedPayoutTx
Make sure to use the segwit version of Script.correctlySpends in
TradeWalletService.finalizeDelayedPayoutTx, which requires the input
value and witness to be passed explicitly (as the latter holds the
actual signature). This was causing BuyerFinalizesDelayedPayoutTx to
fail to do any kind of signature check.

Also refactor the method slightly and remove a redundant call to
WalletService.checkScriptSig (which does the same thing as
TransactionInput.verify) in the branch used by the seller.
2020-11-19 17:19:14 +00:00
Steven Barclay
69d1e16f5e
Prevent takers from using non-segwit deposit tx inputs
Disallow non-P2WH depositTx inputs from the taker, while continuing to
allow them from the maker, so that offers created pre-v1.5.0 can still
be taken. (After some time, those inputs could be disallowed too.)

This is mainly to prevent mass blackmail attacks, where more victims'
money could be locked up than the DAO could possibly compensate them all
for. (This is probably only an attractive attack for a buyer anyway, at
least with the earlier commits.)
2020-11-19 17:19:14 +00:00
Steven Barclay
5a3b072692
Withhold witnesses in buyer->seller depositTx data, until last step
Strip all input witnesses from the depositTx message fields sent from
the buyer, until the last (DelayedPayoutTxSignatureResponse) message is
sent, where they can be bundled in as an extra field. Since the witness
data doesn't affect the final deposit tx id, the seller does not need to
know it until actually publishing the tx.

In the (fully) segwit case, this allows the buyer to prevent the seller
from publishing the deposit tx until the buyer has a valid, fully signed
delayedPayoutTx. Provide the final witness data in an extra 'depositTx'
field in DelayedPayoutTxSignatureResponse, which the seller can merge
with his depositTx witness block (for his own input signatures).
2020-11-19 17:19:13 +00:00
Steven Barclay
803035bdbb
Add new BuyerFinalizesDelayedPayoutTx task
Improve validation of the buyer's delayed payout tx (both before & after
they get the final DepositTxAndDelayedPayoutTxMessage from the peer), by
finalising it independently of the seller. This is now possible since
their 2-of-2 signature is included in the DelayedPayoutSignatureRequest.
Check that the final delayedPayoutTx received from the seller matches it
byte-for-byte (which actually makes its receipt redundant now).

This also fixes an apparent security bug, where the final validation of
the delayedPayoutTx appears to skip any kind of signature check (only a
deposit tx hash check, which is still necessary).

Finally, optimistically check the deposit tx against the input of the
prepared delayedPayoutTx received from the seller, in the case that the
former is non-malleable (that is, the fully segwit case) and thus has a
stable ID given by the hash of the buyer's preparedDepositTx.
2020-11-19 17:19:13 +00:00
Steven Barclay
f02d5ee216
Send seller's delayedPayoutTx signature to peer ASAP
Include a new 'delayedPayoutTxSellerSignature' field with the prepared
delayed payout tx sent to the buyer, in DelayedPayoutTxSignatureRequest.
This will allow the buyer to compute the final, signed delayedPayoutTx
as early as possible and withhold their deposit tx witness from the
seller until they know they have a valid delayedPayoutTx, preventing its
premature publishing in the fully segwit case. (To be done in a later
commit - for now just save the seller's delayedPayoutTx signature.)

As part of this, run the SellerSignsDelayedPayoutTx trade task at an
earlier step (just after payout tx creation) to make its signature
available to the seller ASAP. Also rename 'delayedPayoutTxSignature' to
'delayedPayoutTxBuyerSignature' in DelayedPayoutTxSignatureResponse.
2020-11-19 17:19:12 +00:00
Steven Barclay
79fa219533
Fix missing segwit case when sanitising preparedDepositTx
Make sure witness data is stripped from the seller's prepared deposit
tx, in addition to ScriptSig data, to prevent the buyer from being able
to publish it prematurely (before having signed the delayed payout tx).
2020-11-19 17:19:07 +00:00
ghubstan
ff887eb339
Fix createpaymentacct validation problems
- Add missing boilerplate error handling to GrpcPaymentAccountsService.

- Edit some PaymentAccountForm & PaymentAccountTypeAdapter exception
  messages that would be passed to CLI;  they should be in the same
  style as existing CLI err msgs.
2020-11-19 13:38:34 -03:00
Christoph Atteneder
77aab8a97c
Add error log to get more information on the actual problem 2020-11-19 16:51:45 +01:00
Steven Barclay
88d7d96427
Fix failing OpenOfferManagerTest & PeerManagerTest
These are failing on the tip of release/1.5.0 currently due to extra
validation added to PersistenceManager, causing the build to fail upon
merging upstream. Add missing PersistenceManager.shutDown calls to the
tearDown methods of the affected tests to fix.
2020-11-19 16:47:21 +01:00
Christoph Atteneder
ce265e48b7
Merge pull request #4816 from chimp1984/reduce-persistence-interval
Fix issues with missing persistence for trade state
2020-11-19 16:33:46 +01:00
chimp1984
a4db09fe1d
Move delay for applying mailbox messages inside onInitialized
We need to set addDecryptedDirectMessageListener without
delay as otherwise we could miss direct messages (detected
with localhost testing, with tor its likely slower and
would not have been triggered).
2020-11-19 10:19:48 -05:00
ghubstan
cb9a68bae1
Tidy up payment accts api related msgs on CLI 2020-11-19 12:01:41 -03:00
chimp1984
d6f4eed39e
Add requestPersistence call at TradeTask.complete call.
This is not really needed as we call it at each state change of the
trade but gives more redundancy in case we missed one or once
changes are applied and a dev forgets to call it.

Multiple repeated calls do have close to zero costs.
2020-11-19 09:51:06 -05:00
Christoph Atteneder
580387c0b7
Add error log to get more information on the actual problem 2020-11-19 14:58:44 +01:00
Christoph Atteneder
247c82b386
Merge pull request #4820 from oscarguindzberg/fixSignAes
Use AES key for signing when wallet is encrypted
2020-11-19 09:47:26 +01:00
chimp1984
da9b42fb83
Handle potential deposit confirmed state issues
The deposit confirmed state is set after we applied the mailbox messages,
which led to a task failure due wrong phase and the message was not applied.
Further it can be that the wallet is still syncing and the deposit
confirmed state is set in any time in the future.

To fix the first problem we add a bit of delay so that the trade has
been updated when we apply the mailbox messages. A better fix would be to change
the order of the methods but that is a bit tricky to get right and I dont want to
risk that for that release.

The second problem would require a large change to trigger the mailbox
processing based on wallet state. We prefer to be more tolerant with
the expected phase instead so allow the mailbox message to be processed
also in the DEPOSIT_PUBLISHED state.
This has no risks as the payout tx would be invalid anyway if the
buyer has cheated and sent the msg in not confirmed deposit tx state (only
possible with code manipulation).

A better fix would to add a listener for the wallet and process
the mailbox msg once wallet is ready and trade state set, but I
leave that for another PR.
2020-11-19 00:34:40 -05:00
chimp1984
706ec5a2ed
Add null checks for tradeManager
We get called some setter methods from protobuf methods before tradeManager is set.
2020-11-19 00:07:34 -05:00
chimp1984
438a0d8217
Remove requestPersistence in constructor as TradeManager is not set at that moment. 2020-11-18 19:58:20 -05:00
ghubstan
138822edad
Avoid 'unnecessary use of fully qualified name' codacy issue 2020-11-18 20:05:15 -03:00
ghubstan
08228d07bc
Replace existing api method 'createpaymentacct' impl
In the CLI, this method now takes a single argument, the path to a json
file (a payment account form).  The json text is read from the file
and sent to the server, where it is serialized to a new PaymentAccount
instance, saved, and sent back to the CLI as a protobuf.PaymentAccount.

- Modified existing gRPC boilerplate in grpc.proto and GrpcPaymentAccountsService.

- Modified existing method signatures in CoreApi and CorePaymentAccountsService.

- Replaced existing method impl in CorePaymentAccountsService and
  removed dead code.

- Replaced the CLI's existing 'createpaymentacct' method impl.

- Modified existing tests.
2020-11-18 19:23:21 -03:00
Oscar Guindzberg
5906950e1f
Calculate witness sig with AES key 2020-11-18 18:28:06 -03:00