Commit Graph

1637 Commits

Author SHA1 Message Date
Chris Stewart
5d8a4c0ef2 Change 'height' types from Long -> Int. Int.MaxValue is 2147483647, which is an order of magnitude more than current block heights on mainnet/testnet bitcoin (#685) 2019-08-09 09:22:00 -05:00
Chris Stewart
b0b1c1cc42 Start the process of refactoring our ChainHandler to be able to avoid… (#655)
* Start the process of refactoring our ChainHandler to be able to avoid database calls on TipValidation

WIP: Begin explicity passing state back and forth in return types of PeerMessageReceiver, P2PClient, , DataMessageHandler. This commit also implements the ability to keep our blockchain completely in memory. Previously when we were updating the tip of the chain, we had to make a database read to figure out what the best tips are. This is suboptimal for performance because a database read needs to be done for every block header we see, now we just keep the chain in memory

Fix bug in DataMessageHandler that pre-emptively sent a getheadersmsg to our peer. Make 'chainApiF' internal to our spvNode (not a parameter). This forces the chainApi to be created from disk everytime a new SpvNode is spun up. This keeps us in sync with the blockchain at disk at the cost of disk access and less modularity of SpvNode

Address torkel code review

Fix rebase issues

Address code review

Address nadav code review

* Rebase onto master, fix api changes
2019-08-06 13:31:54 -05:00
Chris Stewart
c934d8efc2 Address issue #673, also refactor fixture stuff to be in companion ob… (#676)
* Address issue #673, also refactor fixture stuff to be in companion objects rather than traits so they can be re-used without extending the trait itself. This allows for more modularity with our fixtures

* fix bugs in unit tests, address #675 to make MerkleBufferTests faster

* Refactor test timeout in UpdateBloomFitlerTest

* fix callback logic bug on matching unrelated txs/addresses in UpdateBloomFilterTest, re-order broadcasting of things to avoid async bugs hopefully

* Make  a def in NodeUnitTest, this keeps tests in the same suite from using the same config. This allows us to write multiple tests per suite, instead of just one. This also adds implicit parameters to our fixture constructors/destructors to properly create and destroy this config. The long term goal here also should be getting rid of config.initialize() we are calling everywhere as this is a anti-pattern, fixtures should take care of construction and destruction of things

* Broadcast tx earlier in test case for UpdateBloomFilterTest

* Rework NodeWithWalletTest to use the new fixtures we have in the node project, now use SpvNodeFundedWalletBitcoind
2019-08-06 11:49:17 -05:00
Scala Steward
4d1b509ae7 Update slf4j-api to 1.7.27 (#677) 2019-08-06 07:13:32 -05:00
Torkel Rogstad
46280c9e59 Add functionality for updating SPV node bloom filter (#585)
* Add functionality for updating SPV node bloom filter

* Add SPV node shutdown to exit hook

* Clean up traits/case classes

* Change fixture in WalletBloomTest

* Fix logging bug in TransactionProcessing

* Add MerkleBuffers

In this commit we add MerkleBuffers, which is an object
that lets us aggreagate merkleblocks with their corresponding
transactions before sending them out. This is global, mutable
state (bad!) but it's a working solution for now;

* Use TestAsyncUtil

* Add MerkleBuffers test

* Send getdata if receiving single header

* Change awaitSync to use block count

* Fix UpdateBloomFilterTest

* Add more logging of chain/headers validation

* Send getdata for all blocks

* Nits: Scaladocs, comments toString
2019-08-02 09:22:20 -05:00
Torkel Rogstad
a76f61f97c Add configurable logging to data directory (#640)
* Add logging to data directory

In this commit we add the ability for the node, chain
and wallet projects (+ the server) to log to the users
data directory instead of whatever directory the
binaries was launched from. This is inherently a bit
more complicated than our previous setup, because
we need to read the user directory before we can create
loggers. As a result of this, some files/methods were
moved around, so the relevant app config could be
found in scope.

We also  introduce several logging categories that can be
tuned individually through user configuration. These logggers
are exposed both as traits that give a field `logger`, or
as methods that return the required logger.

* Add datadir configuration to AppConfig

In this commit we add support for AppConfig to pick up
the data directory configuration file. We also add
a section to the contributing guide on how to tune
logging levels.

* Pass data directories explicitly for configuration
2019-08-01 06:01:56 -05:00
Torkel Rogstad
dd6c86dc14 Add EitherOps back (#666) 2019-07-31 09:16:05 -05:00
cwaldron97
e6dcd1cfb4 Cleaning up Publish Logs (#634)
* This PR is attempting to remove the publishing errors when publish
locally many of which are incorrectly linked things in scaladocs which
there are some differences in formatting. Hopefully this removes alot
if not all of the "link not found for ..." warning messages that show
up.
2019-07-31 12:28:22 +02:00
Torkel Rogstad
cee2665d49 Add note on how to build JAR files (#663) 2019-07-30 18:52:50 -05:00
cwaldron97
f59d4007c3 Replace Bitcoins params in RPC client with CurrencyUnit (#618)
* implemented currency unit and wrote a writer

* Convert more Bitcoins parameters to CurrencyUnit
2019-07-30 18:52:01 -05:00
cwaldron97
7183296b6b Killing Joda Dependency (#643)
Remove Joda dependency
2019-07-29 12:22:25 +02:00
Torkel Rogstad
6f42dca64b Merge pull request #567 from Christewart/2019-07-03-resolve-http-parse-exn-bitcoind
Attempt to resolve issue #527 where bitcoind returns html indicating …
2019-07-23 00:38:28 +02:00
Chris Stewart
898691d1a1 Implement missing branch on POW validation for testnet, implement Blo… (#652)
* Implement missing branch on POW validation for testnet, implement BlockHeaderDAO.find

* implement second special case for if we are allowing min difficulty blocks, but are at a POW change interval. If we are at a POW change interval, we return that block

* Address code review
2019-07-22 07:19:57 -05:00
Torkel Rogstad
400219f74d Tweak error logging of bitcoind responses
In this commit we move the error handling part of bitcoind responses
closer to the source of where they will happen, hopefully
giving better error messages.
2019-07-22 13:33:22 +02:00
Chris Stewart
a378838a8a implement ability to monitor a invoice that we are generated (#649)
* implement ability to monitor a invoice that we are generated

* reorganize tests to get them to pass
2019-07-19 13:03:43 -05:00
Torkel Rogstad
428bd079d9 Merge pull request #647 from torkelrogstad/2019-07-18-merkle
Fix merkle block parsing error
2019-07-19 10:51:28 +02:00
Torkel Rogstad
c64f143628 Fix merkle block parsing error 2019-07-19 10:49:34 +02:00
Chris Stewart
13ba42b087 Call BitcoindRpcTestUtil.stopServer inside of EclairRpcTestUtil.shutdown (#645)
* Call BitcoindRpcTestUtil.stopServer inside of EclairRpcTestUtil.shutdown

* Reset submodule
2019-07-18 12:35:33 -05:00
Torkel Rogstad
dadf01493a Merge pull request #606 from scala-steward/update/sbt-native-packager-1.3.25
Update sbt-native-packager to 1.3.25
2019-07-18 15:50:27 +02:00
Torkel Rogstad
5f80476f4a Update cli.sbt for native-image building 2019-07-18 15:47:59 +02:00
Torkel Rogstad
245a77b3db Merge pull request #637 from cwaldron97/2019-07-16-remove-bitcoinj-dep
Remove BitcoinJ from dependencies
2019-07-18 11:01:19 +02:00
cwaldron97
ab29c0cc8f more removal 2019-07-17 14:47:45 -05:00
Scala Steward
f3b92d33ce Update akka-http, akka-http-testkit to 10.1.9 (#639) 2019-07-17 13:17:58 -05:00
Nadav Kohen
0013aded27 Removed self-reference infinite loop for LnTaggedFields.apply (#641) 2019-07-17 12:34:33 -05:00
Scala Steward
f252a08f6b Update sbt-native-packager to 1.3.25 2019-07-17 15:31:16 +02:00
Torkel Rogstad
7f0b11c019 Add functionality for broadcasting TXs to node (#577)
* Add functionality for broadcasting TXs to node

In this commit we add functionality and tests
for broadcasting a TX from our node. To accomplish
this we introduce a table over broadcastable TXs
that's added to when the externally facing method
broadcastTransaction(tx) withing SpvNode is called.
We send out a inv message for the TX we just added,
and upon receiving a getdata message we search in
the previously mentioned table for entries where
the hashes match up.

* Broadcast TX from server to SPV node

* Perform assertions on the balance of bitcoind after sending a TX

* Remove typeclass from broadcast TX

* Refactor withFundedWalletAndBitcoind

* Match on BitcoindExecption instead of throwable

* Clean up broadcast functionality after code review
2019-07-17 07:32:05 -05:00
cwaldron97
87f6300082 started to remove bitcoinj deps 2019-07-16 15:12:38 -05:00
Chris Stewart
90dbb9d9f8 qAddress issue where source and target fields don't work completely for jdk 9+ when trying to target jvm 1.8 (#636) 2019-07-16 14:58:36 -05:00
Chris Stewart
220d8d160e Scope the targetting of code only to compiling code, instead of including things like javadoc generation (#632) 2019-07-16 11:32:27 -05:00
Torkel Rogstad
393a531f8a Merge pull request #630 from torkelrogstad/2019-07-16-false-positives
Remove assertion on irrelevant TX
2019-07-16 17:15:11 +02:00
Torkel Rogstad
5194fb1f8b Merge pull request #594 from torkelrogstad/2019-07-10-bloom
Add all wallet outpoints to bloom filter
2019-07-16 17:07:21 +02:00
Chris Stewart
5bbcc33cb6 Target jvm 1.8 with test files along with source files (#631) 2019-07-16 09:10:50 -05:00
Torkel Rogstad
4b95383020 Merge pull request #612 from scala-steward/update/sbt-mdoc-1.3.1
Update sbt-mdoc to 1.3.1
2019-07-16 15:53:03 +02:00
Torkel Rogstad
19847d4ab4 Merge pull request #604 from scala-steward/update/sbt-api-mappings-3.0.0
Update sbt-api-mappings to 3.0.0
2019-07-16 15:50:06 +02:00
Scala Steward
2b03665fd8 Update sbt-mdoc to 1.3.1 2019-07-16 15:33:28 +02:00
Scala Steward
7fd6078992 Update sbt-api-mappings to 3.0.0 2019-07-16 15:32:58 +02:00
Torkel Rogstad
dcd4cf3132 Remove assertion on irrelevant TX
Due to how bloom filters work (they give false
positives) it's meaningless to assert on _not_
receiving a transaction from our peer. In most
cases we're not going to receive an irrelevant
TX, but if it happens we can't be sure if it's
because we did something wrong or because we
just hit a false positive.
2019-07-16 14:29:01 +02:00
Torkel Rogstad
45a3e93a3d Add all wallet outpoints to bloom filter
This is a workaround for Bloom filters never being
updated for SegWit. See comment in
LockedWallet#getBloomFilter for more context.
2019-07-16 14:18:29 +02:00
Chris Stewart
7a21a8d2ff Make sure our secp256k1jni package is compiled against java 8 (#629)
* Make sure our secp256k1jni package is compiled against java 8

* revert submodule
2019-07-16 07:07:36 -05:00
Torkel Rogstad
98db3def4c Merge pull request #590 from torkelrogstad/2019-07-10-addresses
Add notion of address types in wallet
2019-07-16 14:01:03 +02:00
Scala Steward
50e3a4747a Update sqlite-jdbc to 3.28.0 (#616) 2019-07-16 06:18:40 -05:00
Torkel Rogstad
c9912af46b Merge pull request #598 from torkelrogstad/2019-07-11-bitcoind-exception
Add types for various bitcoind RPC exceptions
2019-07-16 13:08:53 +02:00
Torkel Rogstad
4bdc7966d0 Add notion of address types in wallet
In this commit we
1) Add the notion of address types in the wallet, and remove
    the emphasis on account types. Users now just request
    a segwit/nested-segwit/legacy address, and we take care
    of querying for the correct account
2) Fix a bug where a wallet could only get addresses for
    its default address type. This was a pretty minor bug,
    where a few values that should have been dynamic was
    hard coded.
2019-07-16 12:36:38 +02:00
Torkel Rogstad
eb3fbbb259 Add types for various bitcoind RPC exceptions
In protocol.h (Bitcoin Core) all RPC errors are enumerated. The
exceptions added here are copied directly from that file.
2019-07-16 12:20:24 +02:00
rorp
b6b4431935 Revert payment monitor (#600)
* Revert payment monitor

* Revert payment monitor

* expose EcecutionContext in EclairApi

* more configurable payment monitoring

* cleanup, more tests

* addressed comments
2019-07-15 11:18:48 -05:00
Scala Steward
e8c334da87 Update sbt-bloop to 1.3.2 (#602) 2019-07-15 09:14:42 -05:00
Chris Stewart
a4e574aac3 2019 07 15 rm cli testkit (#625)
* re-add skip publishing for the cli, remove the dependency from the testkit

* Apply common settings to picker project
2019-07-15 08:04:42 -05:00
Chris Stewart
f52ab2d8d7 Favor publishing 2.12 artifacts first in bitcoin-s, so if something fails with the 2.11 build we get the 2.12 artifact first (#624) 2019-07-15 06:27:05 -05:00
Chris Stewart
d67aec8ebb If we don't publish these three subprojects, testkit cannot be used as a dependency for other applications (#621) 2019-07-14 07:27:59 -05:00
Torkel Rogstad
4f4636448c Node cleanup (#591)
* Cleanup

In this commit we cleanup a few Scaladocs and change some
trait/impl pairs into just a case class.

* Node cleanup

In this commit we
1) Rename Client to P2PClient. Client is a very generic name.
2) Clean up some Scaladocs
3) Remove some unecessary objects/traits/classes and replace them
    with case classes
4) Add trace logging of bytes received in P2PClient
2019-07-13 09:26:00 -05:00