* PSBT Serialization/Deserialization (#917)
* PSBT Serialization and Deserialization
* Remove debug code
* Create PSBTParseResult, Add more psbt test cases, and various small nits
* PSBT version checking
* Remove PSBTHelper, give PSBTRecord and PSBTMap a fromBytes
* Fix compile issue, preserve ADT
* PSBT Combiner
* PSBT Updater
* Fix PSBT version number to be read as little endian
* Make function names more clear, add scaladoc, require not finalized
* Combiner scaladocs
* Test case from BIP
* Make compatible with older versions
* PSBT: Fix for EmptyWitness changes (#968)
* PSBTInputMap to UTXOSigningInfo
* Remove vars
* Add missing param
* Fix byteVectorOrdering for when x == y
* getUTXOSpendingInfo Tests
* Fix formatting errors
* Give conditional path default value
* formatting fix
* Fixed InputPSBTRecord.FinalizedScriptSig using asmBytes (#1004)
* Fixed PSBTTest after rebasing onto master
* PSBT Constructors and Extraction (#997)
* Added PSBT constructors
* Revived option to use signers in toUTXOSpendingInfo
* Added transaction extraction
* Responded to code review
* Added extraction test from BIP
* Added validation (option) to PSBT extraction
* Added property based test for PSBT.extractTransactionAndValidate
* Marked PSBT as new code for PropertyCheckConfiguration
* PSBT Finalizer (#1002)
* Added finalizing functionality to PSBTs
* Cleaned things up
* Added finalizer test, fails
* Check that PSBT is not already finalized when finalizing PSBT
* Added P2PKWithTimeout cases
* Formatting fix
* PSBT Generators (#1019)
* Introduced non-finalized constructor
* Added property based test comparing finalized and un-finalized construction, it currently fails due to EmptyScriptPubKey not being supported in various ways. Also fixed a ton of bugs!
* Fixed easy bugs relating to EmptyScriptPubKey, one is left
* Fixed the last bugs (multisig order and 0-of-n stuff) and now tests pass!
* Separated out direct finalized PSBT construction from non-finalized PSBT construction
* Translated construction work in tests into PSBT generators
* Added serialization symmetry test
* Made PSBT fee generation dependent on other generators to ensure low enough fees for signing
* Responded to code review
* Added scaladocs
* Fixed arbitraryPSBT to work with older scala versions
* Fixed PSBT compilation breakages from rebase
* Fixed test breakages from rebase
* Validate the PSBT unknown is not a known field
* Increase code coverage on PSBT tests
* Address review
* formatting
* Add error messages, rename function
* Psbt Signer (#1025)
* PSBT Signer
* Create addSignature function for PSBTs
* Use PartialSignature instead of Tuple
* Create extra util functions
* scaladoc and simplify case
* Formatting fix for psbt scaladocs
* Clean up code, add error messages, and scaladoc
* add type hints
* Change InputPSBTMap.fromUTXOSpendingInfo to use BitcoinSingleSigner
* optimize import
* Define separator byte for psbt map
* getRecords simplification
* remove braces, add error message
* PSBT stuff assigned to nkohen (#1035)
* Responded to psbt review assigned to me
* Moved separatorByte to a place where all can use it
* PSBT independent record calls (#1037)
* PSBT independent record calls
* move logic to super class
Co-authored-by: Nadav Kohen <nadavk25@gmail.com>
* Reworked PSBT finalization to return a Try[PSBT] rather than an Option[PSBT] (#1036)
* PSBT signer property based tests (#1038)
* PSBT property based tests
* Address review
* PSBT Combiner property based tests (#1039)
* PSBT Combiner property based tests
* Create pruneGlobal util function
* Switch to arbitrary gen
* Use BaseTransaction instead of Transaction
* Fix transaction witness to work from base transactions
* PSBTs response to Chris's review (#1046)
* PSBT chris's review
* Rename val, give master fingerprint a val
* Formatting fix
* Responded to code review from chris assigned to nkohen
* Split PSBT.scala into many files
* PSBT Docs (#1048)
* PSBT docs
* Fix compiler error, remove nesting
* PSBT output updater tests
* Validate psbt outputs
* Clean up code
* Remove P2WPKHWitnessV0 addition
* format
* PSBT Updater property based tests
* Move code to match block
* EmptyScriptWitness check
* Address nadav review
* Remove unnecessary code, make utxo adder better
* Move require and add error message
* Move require
* PSBT unit tests by Ben
* Change to EmptyScriptPubKey
* Added unit tests to increase code coverage
* responded to review
* Move PSBT unit test to separate file
* Make unknown generator only generate distinct records
* Use groupBy key instead of distinct
* use only first element
* Combine distinctness by key
Co-authored-by: Ben Carman <benthecarman@live.com>
* Create 'fundRawTransaction' and 'fundRawTransactionInternal'
* Move TransactionTestUtil to testkit, begin writing tests for fundrawtransaction
* Add FundTransactionTests
* Move things to 'FundTransactionHandling' trait
* Start segregating things by HDAccount in the wallet, this gives us the ability to query for balances based on account, fund a transaction based on an account, generate a new address based on an account etc. All old api calls are now based on the default account, i.e. getBalance() returns the balance for account 0, fundRawTransaction funds the transaction from account 0 etc.
* Fix compile issue with 2.11.x
* Bump address generation Thread.sleep() to 500ms
* Address ben code review
* Address code review
* Introduced UTXOSpendingInfoSingle
* Implemented constructors for UTXOSpendingInfoSingle
* Introduced BitcoinSignerSingle
* Implemented SingleSigner
* Added property-based test for SingleSigner, it fails
* Fixed SignerTest :)
* Responded to code review
* Added scaladocs
* Fixed p2sh(p2wsh) signing
* Responded to code review and separated UTXOSpendingInfoSingle from UTXOSpendingInfoFull
* Fixed outputGen after rebase
* Fixed txbuilder.md to show this branch's changes
* Create 'fundRawTransaction' and 'fundRawTransactionInternal'
* Move TransactionTestUtil to testkit, begin writing tests for fundrawtransaction
* Add FundTransactionTests
* Move things to 'FundTransactionHandling' trait
* Address code review
* Run scalafmt
* Create MaskedToString, implement it in ECPrivateKey, ExtPrivateKey, MnemonicCode
* Add MaskedToString to AesPassword, AesKey, and BIP39Seed
* Add final to MaskedToString.toString() so it can't be overriden
* Add more expressive txo states for the wallet
* Rename 'PendingReceived/PendingSpent' -> 'UnconfirmedReceived/UnconfirmedSent'
* Address code review
* Fix posInt implementation to work with older scala versions
* Rename to PendingConfirmationReceived/PendingConfirmationSpent
* Create ExtSign, use it on ExtPrivateKey
* Add documentation on how to Sign things with ExtSign
* Add ExtSign.sign for a bip32 path
* Make sign(bytes,path) not return a Future, add documentation
* Address nadav's code review
* Fix mdoc sign.md
* Fix CLTV bug where timestamps using seconds are not allowed in TxBuilder
* Added test for CLTV second timestamp and ran scalafmt
* Fixed another bug
* Fixed bug where calcLockTime was not looking past first CLTV tx
* Redid conditional interpreting without binary trees
* Fixed ControlOperationsInterpreterTest
* Implemented O(1) conditional handling as proposed here https://github.com/bitcoin/bitcoin/pull/16902 because Ben Carman pointed it out
* Added some docs
* Responded to code review
* Introduced ConditionalScriptPubKey
Some more progress
Added Conditional signing infrastracture, tests do not pass and there are no Conditional tests
Fixed tests!
* Redid calcLockTime and calcSequenceForInputs in TxBuilder (added Conditional support)
* Added ScriptGenerators for Conditional scripts, only one test to go!
* Fixed CLTV(Empty) tests
* Responded to code review
* responded to code review
* ScriptSignature only types Policy-compliant script signatures
* Fixed md doc
* Replace scriptPubKeyToSatisfy with spendingInfoToSatisfy and made UTXOSpendingInfo ADT nicer
Tightened up types on Signer with a type parameter
Factored out common functionality in Signer
Responded to code review
* More review
* 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
* 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
* Create base traits for async tests called BaseAsyncTest, and then create two subtypes, BitcoinSAsyncTest and BitcoinSAsyncFixtureTest to make it easier to manage resources related to test cases. Now it is easier to shutdown things like an actor system in a structured manner
* Remove two bitcoind tests that don't make sense, 'duration' in the parameter is _really_ an interval (bad naming by usTesting an interval does not make sense inside of TestRpcUtilTest
* Turn log off for ChainAppConfigTest we expect to fail
* Bump timeout for BitcoinSUnitTest, use builtint sbt scalafmtCheck
* Remove hardcoded scalafmt binary
* reduce generator size to attempt to fix#768