Commit graph

5892 commits

Author SHA1 Message Date
Steven Barclay
6ca42c0cd1
Enable extraction of segwit pubkeys from raw tx inputs
Factor out a new RpcService.extractPubKeyAsHex method, to take public
keys from the inputs of the raw transactions returned by the RPC client,
when building TxInput objects to incorporate into the DAO state. Enhance
the method to additionally support segwit (P2WPKH & P2SH-P2WPKH) inputs
(but only the first input for backwards compatibility - see code
comment). Also fix a bug when handling non-SIGHASH_ALL input signatures.

This will allow segwit BSQ to be used in proof-of-burn and issuance txs,
which need a public key associated with the tx to establish ownership of
it, when signing messages with a proof-of-burn or staking merit awarded
from a compensation issuance, respectively.

Also add unit tests for the factored-out method and add a missing RawTx
toString() method, to aid debugging the TxInput fields within the
processed block returned by RpcService.
2021-01-21 10:10:29 +00:00
Steven Barclay
8104301b52
Use new Bitcoind(Client|Daemon) & remove btcd-cli4j
Migrate RpcService over to the new block notification daemon and RPC
client based on jsonrpc4j. Drop in own DTO classes in place of the ones
defined by btcd-cli4j and rename requestBtcBlock & addNewBtcBlockHandler
to requestDtoBlock & addNewDtoBlockHandler respectively.

Also remove now redundant filtering from the logback config and update
grade-witness.
2021-01-21 10:10:28 +00:00
Steven Barclay
ac78639656
Improve exception handling in BitcoindDaemon
Wrap any exception that occurs during socket IO or within the supplied
BlockListener with a new 'BlockNotificationException'. This brings the
exception handling more in line with that of the old BtcdDaemonImpl and
makes it easier to match them downstream in FullNode.handleError.
2021-01-21 10:08:24 +00:00
Steven Barclay
4470af8edb
Add missing copyright headers to new files 2021-01-21 10:08:23 +00:00
Steven Barclay
f34231abb6
Factor out failure callback logic into new Utilities method 2021-01-21 10:08:23 +00:00
Steven Barclay
863392bc74
Factor out executor shutdown logic into new Utilities method 2021-01-21 10:08:22 +00:00
Steven Barclay
b7c7eaf1f2
Add replacement bitcoind block notification daemon
Provide a new 'BitcoindDaemon' block notification socket server, to
replace 'com.neemre.btcdcli4j.daemon.BtcdDaemonImpl'. This starts a
single service thread to listen for raw block hashes on localhost port
512*, sent by the specified 'blocknotify' shell/batch script, delegating
to a pool of worker threads to run the supplied BlockListener handler.
Unlike the original BtcdDaemonImpl class, a call to the 'getblock' RPC
method is not made automatically to supply a complete block to the
handler, instead requiring a separate, manual BitcoindClient.getBlock
invocation from within RpcService.

Also provide unit tests using a mock ServerSocket + Socket.

TODO: Use the new Bitcoind(Client|Daemon) implementations in RpcService,
 in place of btcdcli4j Btcd(Client|Daemon)Impl & remove the old library.
2021-01-21 10:08:22 +00:00
Steven Barclay
dbe4953f63
Add replacement bitcoind RPC client using jsonrpc4j
Create a new 'BitcoindClient' interface and a corresponding builder, to
replace the old 'com.neemre.btcdcli4j.core.client.BtcdClientImpl' class
from the btcdcli4j library. This is instantiated by jsonrpc4j using a
dynamic proxy. It provides only a cut down version of the bitcoind RPC
API, exposing the methods 'getblock', 'getblockcount' & 'getblockhash',
as they are the only ones currently being used by RpcService.

Add corresponding Jackson-annotated DTO classes to model the JSON
structures returned by bitcoind, very similar to the classes provided by
btcdcli4j. Note that we use Double instead of BigDecimal to represent
fractional fields (difficulties + coin amounts in BTC), as they have
more consistent Jackson (de)serialisation and appear to be able to
faithfully round-trip numeric fields produced by bitcoind. Also note
that doubles can faithfully represent any valid decimal BTC amount (that
is, with 8 d.p. of precision) up to 21 million.

For now, keep the old BtcdClientImpl instance used by RpcService in
place, as the btcdcli4j block notification daemon is dependent upon it
and would also need to be replaced.

Also add unit tests for BitcoindClient which test against sample regtest
responses, using a mock HttpURLConnection.
2021-01-21 10:08:22 +00:00
Steven Barclay
5990fcf9e7
Bring ScryptType enum up to date with latest bitcoind
Add 'witness_v1_taproot' script type to the enum and proto.pb, so that
it doesn't cause any problems when Taproot is activated and the new
script type starts showing up in RPC getBlock(..) responses (including
possibly BSQ transactions).

Also change the Java enum order (which shouldn't cause any problems as
the ordinal isn't used directly in hashCode calculations) and add the
missing 'witness_unknown' enum value to pb.proto to bring it in sync.
2021-01-21 10:08:15 +00:00
Christoph Atteneder
334fbdbc86
Merge pull request #5092 from jmacxx/add_cashbymail3
Add payment method "Cash by mail"
2021-01-21 10:26:59 +01:00
Christoph Atteneder
570d6a8b38
Merge pull request #5093 from ghubstan/02-trading-scripts
Add api trade simulation scripts
2021-01-21 09:42:14 +01:00
jmacxx
2ab96d997f
Update core/src/main/resources/i18n/displayStrings.properties
Co-authored-by: m52go <735155+m52go@users.noreply.github.com>
2021-01-20 16:34:43 -06:00
ghubstan
b2d8faf2cd
Log price feed request warnings, do not throw to CLI
The price feed service throws PriceRequestExceptions when switching
currencies, log those exceptions as warnings in the server and don't
pass them up to the CLI.
2021-01-20 19:27:35 -03:00
ghubstan
d18b2d5a10
Run an async price feed request when CLI needs market price
The CLI was receiving stale, cached market prices from the feed service.
2021-01-20 17:46:35 -03:00
ghubstan
ced422e930
Add new api CLI method 'getbtcprice'
The server impl was there, but it is now needed by the trading
sim scripts (CLI) to get the price from the Bisq server instead
of the feed.  (The server does not request prices more than
once a minute.)
2021-01-20 15:01:16 -03:00
ghubstan
078f010125
Remove api dev/test log statement
This server log output was intended as an aid to api devs, but
is no longer needed after the change to posix-sytle method opts
with self explanatory labels (replacing the ambiguous positional
CLI method opts).
2021-01-20 12:03:21 -03:00
Christoph Atteneder
f0f27db83e
Fix typo in trigger price tooltip 2021-01-20 15:22:25 +01:00
ghubstan
67eed01d74
Fix tx-fee-rate opt description
For requested change
https://github.com/bisq-network/bisq/pull/5093#discussion_r560906913
2021-01-20 11:12:21 -03:00
ghubstan
72731e5c03
Add parens around (sats/byte) 2021-01-20 11:07:55 -03:00
ghubstan
11096d5c85
Fix tx-fee-rate opt description
For requested change
https://github.com/bisq-network/bisq/pull/5093#discussion_r560907371
2021-01-20 11:05:23 -03:00
ghubstan
031b18edfa
Fix typo
For requested change
https://github.com/bisq-network/bisq/pull/5093#discussion_r560906396
2021-01-20 11:02:09 -03:00
ghubstan
fce3aab40d
Improve description
For suggested change
https://github.com/bisq-network/bisq/pull/5093#discussion_r560905251
2021-01-20 10:59:49 -03:00
ghubstan
86758414b7
Fix punctuation
For suggested change
https://github.com/bisq-network/bisq/pull/5093#discussion_r560902858
2021-01-20 10:45:41 -03:00
ghubstan
71ffa0f997
Explain that paid tx fees are forfeited
For suggested change
https://github.com/bisq-network/bisq/pull/5093#discussion_r560901896
2021-01-20 10:41:21 -03:00
chimp1984
ccc6f3f466
Do not pass proxySocketFactory to BlockingClientManager
if we use a local Bitcoin node.
2021-01-19 15:08:49 -05:00
ghubstan
fbc31a5e86
Merge branch 'master' into 01-add-method-help-docs 2021-01-19 10:23:41 -03:00
jmacxx
531e8ca408
Add CASH_BY_MAIL to TradeStatistics3 enum 2021-01-19 07:12:14 -06:00
Christoph Atteneder
728439eecb
Merge pull request #5077 from stejbac/fix-reimbursement-validator
Fix request amount bounds in ReimbursementValidator
2021-01-19 11:00:17 +01:00
Christoph Atteneder
3d9e2a5ad8
Merge pull request #5083 from stejbac/fix-btc-node-converter-test
Avoid reverse DNS lookup in BtcNodeConverterTest
2021-01-19 10:37:27 +01:00
Christoph Atteneder
3f5c455f06
Merge pull request #5091 from jmacxx/test2
Reword "trade started" popup messages per suggestion
2021-01-19 10:27:43 +01:00
Christoph Atteneder
88c4272c63
Merge pull request #5080 from chimp1984/do-not-require-reason-for-payment
Change rule for "reason for payment" field to not use trade ID but leave it empty
2021-01-19 10:01:52 +01:00
jmacxx
3839f5961c
codacy 2021-01-18 21:58:14 -06:00
jmacxx
e11209d395
Add payment method "Cash by mail" 2021-01-18 21:15:18 -06:00
jmacxx
d7339196b7
Fix apostrophe; add message about discussing reason for payment text. 2021-01-18 19:35:17 -06:00
jmacxx
a90d606c01
Reword trade started popups per @m52go suggestion 2021-01-18 16:43:43 -06:00
Steven Barclay
3dd552c2b3
Avoid reverse DNS lookup in BtcNodeConverterTest
Prevent failure of testConvertClearNode() on some machines, caused by
use of InetAddress.getHostName on the mock peer address. This does a
reverse DNS lookup and potentially returns something other than the
expected "192.168.0.1" string.

Also avoid an unnecessary getHostName() call on the SOCKS5 Tor proxy
InetAddress in WalletConfig, by using an alternative InetSocketAddress
constructor.
2021-01-18 16:21:52 +00:00
ghubstan
04657d9054
Explain example 2021-01-17 12:59:54 -03:00
ghubstan
44c11922a6
Add method help docs 2021-01-17 12:58:26 -03:00
sqrrm
d3971ef7dd
Merge pull request #5072 from chimp1984/persist-and-republish-mailbox-messages
Persist and republish mailbox messages
2021-01-16 20:24:13 +01:00
ghubstan
13d0d3e9f1
Add method help doc 2021-01-16 15:43:59 -03:00
ghubstan
9efeee83e3
Explain example 2021-01-16 15:35:43 -03:00
ghubstan
a133b0d7e3
Add method help doc 2021-01-16 15:35:14 -03:00
ghubstan
dab65e7f78
Fix typo 2021-01-16 15:27:46 -03:00
ghubstan
cde9a6d7c8
Add method help docs 2021-01-16 15:27:14 -03:00
ghubstan
03f6c2a4d3
Add method help docs 2021-01-16 15:04:23 -03:00
ghubstan
629f408bdf
Add method help docs 2021-01-16 13:45:07 -03:00
ghubstan
5538914cf8
Add line break 2021-01-16 12:03:06 -03:00
ghubstan
1ad7b351b6
Remove uneeded method 2021-01-15 16:33:52 -03:00
ghubstan
ec9f783eb5
Remove switch(hardcoded enum.name)
There is no need for a switch here, the doc exists or it does not.
2021-01-15 16:25:39 -03:00
ghubstan
a067ba1228
Add new CoreHelpService and method help docs
Adds all the gRPC server boilerplate, and a simple help service
that serves method help in man page format.  Help text is maintained
in text files located in core/src/main/resources/help.

Only some of the method help text files are defined in this
change, more to be added.
2021-01-14 10:19:39 -03:00