* WIP: De-futurify TipValidatoin.chewNewTip()
* De-futrify POW and TipValidation, now tip connection is done synchronously thanks to our in memory blockchain implementation
* Fix improt issues, unused parameters
* 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
* 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
* 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.
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.
* 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
* Split wallet functionality into multiple traits
In this commit we refactor LockedWallet into multiple traits
that provide functionality related to a subset of total wallet
functionality. This has the benefit of making it clear which
methods are helper methods that are only intended to be used
in a very specific setting, and which methods are part of the
internal wallet API that other parts of the wallet can use.
* Rework TransactionOutput and TransactionOutPoint to case classes
* Add extension methods for flattening lists of assertions
* Segregate confirmed and unconfirmed balance methods
* Add test for FutureUtil.sequentially
* Add trace logging of balance fetching
* Process outgoing TXOs
Move TX processing into separate trait, add internal API method
Unify DB representation of TXOs
Prior to this commit we stored TXO information
across diferent tables, with joins and tuples
needed a bunch of places to keep track of
everything we needed. In this commit we unify
the tables, leaving us with only one table for
TXOs.
* implement Ordered[T] instead of creating new methods for that
* remove new line
* implement Ordered in LnCurrencyUnit
* implement Ordered in MilliSatoshis
* implement Ordered in ScriptNumber
In this commit we update our AesCrypt
functionality to work with AES keys rather
than passphrases that are extended to keys.
This makes it easier to integrate with other
languages, as the key stretching introduces
a bunch of additional parameters to the
actual AES encryption.
We also include tests that verify that we're
able to encrypt/decrypt using Bitcoin-S,
Crypto-JS (JavaScript), pycrypto (Python)
and OpenSSL CLI.
* Log messages more granularely in node
* Add pong message
* Rework P2P service identifier
The old implementation didn't catch the notion
that service identifiers was a bit field where
multiple services could be set at the same time.
* Make Peer take InetSocketAddress
Previously it took NetworkIpAddress.
This doesn't make any sense, as we
need to know the services bitfield
to construct a NetworkIpAddress.
* Clean up logs and toString methods
* Clean up node README and main method
* Make all networks final case objects
* Skip publishing of wallet, node and chain
* Clean up logging of node and chain modules
* Add logging of max height in SpvNodeMain
* Clean up Scaladoc and toStrings
* Add logging configuration as symlinks in node
We'll have to figure out a more stable solution to
configure logging for the SPV node, but for the time
being this is an acceptable solution.
* Fix 2.11 compiler error
* Implemented GCS (WIP)
Added some of Chris' tests for golombEncode and golombDecode
Fixed GCS.golombDecodeSet
Separated GCS object from GolombFilter class
Added hanging test for set encoding
Fixed property test for encoding and decoding arbitrary sets
Added test for GCS.buildGCS and hashing function consistency
Added method to construct a Block Filter from a Block
Added scaladocs in GCS.scala
Added TempUtxoProvider to make BlockFilter testable
Wrote a test for GolombFilter.matchesHash
Added test for arbitrary data matching in bip 158 filter
Added optional right-padding on GCS BitVector, BlockFilter.fromHex, and got started on BlockFilterTest
Cleaned up Bip158TestCase.fromJsArray
Fixed parsing of test vectors for bip 158
Wrote test for BlockFilter (doesn't pass)
Responded to some code review
Included CompactSizeUInt in filter
Created BitcoinScriptUtil.getDataTokens for output serialization
Wrote test for BitcoinScriptUtil.getDataTokens
Added test for BitcoinScriptUtil on the genesis block
Fixed name
:(
* Fixed SipHash and block serialization!
* Fixed bugs relating to empty scripts, all tests passgit push --force-with-lease nadav 2019-05-28-bip158 !
* Cleaned up BitcoinScriptUtil.getDataTokens and its test
* Responded to code review
* Factored out common code from BlockFilter apply methods
* Some cleanup
* Add getAddressInfo to Wallet API
* Add Bloom filter and event callbacks to SPV node
* Move wallet test trait to testkit
* Test for connecting SPV node with wallet
* Tune logging in SPV node
* Clean up BloomFilter
* Proper toString in inventory and inventorymessage
* Actually pass in callbacks to SPV node
* Fix rebase screwup and partially respond to code review
* Default to file based databases in tests
This is due to issues with deadlocks with
in-memory based databases. We need DBs
to stay alive between connections, but
not across tests.
In DB intensive chain validation tests we
use in-memory databases instead. This
seems like a reasonable tradeoff between
simplicity and speed.
* Make SpvNodeCallbacks contain sequence of functions within
* Make Bloom filter non-optional in SpvNode
* Add findAll() to CRUD
* Add getAddressInfo to Wallet API
* Insert pubkey into bloomfilter also inserts hash
In this commit we also simplify parts of
BloomFilterTest, and move what used to be in
BloomFilterSpec into BloomFilterTest.
* Add bloom filter generation to wallet
* Add bloom false positive rate to wallet config
* Add logging to SQL errors
* Fix a bug where HDPath.next returned the wrong path
* Add FutureUtil.sequentially
* Make bloom filter size calculation more explicit
* Return Vector of pubkeys instead of Seq
* Verbose handling of address fetching in test
* Rename P2P tests and move generators into correct package
* Add more tests for P2P messages
* Add note on coverage to contributing guide
* Replace network in P2P header with typed network
* Add more P2P tests
* Add more tests for ECPriv and ECPub