* Refactored Signer interface to use TxSigComponent and UTXOSpendingInfo
Fixed all the broken things
Replaced TxSigComponent with unsigned Transaction in Signer interface to remove illegal states
* Added p2sh throw case in Signer
* Created P2WSHSigner and removed P2WSHWitnessSPKV0 case from P2PK and P2PKH signers
* Moved P2WSH MultiSig from MultiSigSigner to P2WSHSigner
* Cleaned up P2WSH case of BitcoinTxBuilder.signAndAddInput to exclusively use P2WSHSigner
* Replaced Option[(TxSigComponent, ScriptPubKey)] with an ADT
* Added signing with overrides to super Signer class to simplify delegation code
* Added Scaladocs for OverridesForNestedSigning ADT
* Made naming better for OverridesForNestedSigning ADT and added scaladocs
* Update script_tests.json, fix bugs that were unveiled with that update. Specifically around handling negative zero in Script, and cleanstack behavior for segwit scripts. We were not checking for equality at the byte level for negative zero. With cleanstack, we were failing the script, but not failing with the correct error. If you look at interpreter.cpp in bitcoin core, cleanstack check is done before checking if the stacktop is true or false
* Address code review
* Make ChainApi to scan the block filters in order to find matches
* performance improvements, unit test
* some parallelization
* addressed comments
* parallelism level
* fix parallelism computation
* Scala 2.11 compatibility
* increased test coverage
* cleanup
* more checks and cleanup
* change ChainApi.getMatchingBlocks signature
* some more changes
* Tightened up types, only allowing ExecutionInProgressScriptPrograms to be executed in Script OPs and having output type that cannot be PreExecutionScriptProgram
* Fixed all tests!
* Replaced all calls to loop and loopOrComplete with a single one at the bottom to retain the tailrec property
* Added a couple docs
* Removed all IntelliJ warnings and did some very minor and contained cleanup
* Refactored ScriptInterpreter.run into nicer pieces
* Replaced all calls to isInstanceOf with matches
* Use the fact that network headers specify the number of bytes in the payload rather than just parsing from bytes.size, this should allow us to be more precise when parsing NetworkPayloads rather than _hoping_ that bytes.size does not land on pseudo-valid NetworkPayload. This hopefully resolves#782
* Add safety check around HeadersMessage.toString()
* Add invariant to NetworkMessage saying payloadSize in header must be the actual payload size
* Update scalafmt to 2.0.1
* Scalafmt
In this commit we
1) Reconfigure the .scalafmt.conf file
2) Add a scalafmt binary (same version as specified in conf file)
3) Use said binary on CI to check that everything is formatted correctly
* Ran scalafmt
* Update scalafmt ignore
* Add scalafmt plugin to project/plugins.sbt, run it
* run scalafmt
* Bump Scala versions
Support Scala 2.12.9
and 2.13.0.
To make this easier, we delete the `scripts` project. Everything
that was in here was covered by content on the website. We also
delete the `doc` folder, as that was a remnant from when `scripts`
was called `doc`.
* Crib uPickle akka-http support while we wait for publish
* Fix compiler warnings
* Add note on test logging to contribution guide
* Reduce duplication in Blockchain implementation
* Use Scala 2.12 for website
* Introduce compat package object for collections converters
* Fix Either compiler warnings
* Add sync-chain and create-wallet docs from deleted scripts
* Fix rebase goofup
* 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.