* Fixed toString() bug.
* Updated comments to match present Bitcoin Core behavior with respect to User-Agent.
* Removed constructor accepting a boolean. This changes public API but neither multibit
nor bitcoin-wallet nor mycelium nor hive-android uses this version of constructor.
The rationale is to avoid passing a boolean to a method as this makes code hard to read.
Client classes updated to preserve original semantic. All tests pass.
Script.<clinit> depended both on Script.<init> and NetworkParameters.<init> to prepare ScriptChunk cache.
At the same time NetworkParameters.<init> depended on Script.<clinit> by using Script.writeBytes().
The fix frees Script.<clinit> from both the NetworkParameters and Script objects.
This should remove the root cause behind NetworkParameters construction not being thread safe.
* This is intended to clarify distinction between full message and its payload to match terminology advertised on https://en.bitcoin.it/wiki/Protocol_specification.
* Does not change public API.
* These refactorings were mostly automated and should not introduce bugs. All tests pass.
This is a complementary approach to what the estimatefees code for Core does, because Core cannot really measure confirmation time for a fee level if nobody is setting it.
If a Transaction contains a DeterministicKey of our
DeterministicKeyChains, then we should mark this key as issued. This can
happen, when we replay/resync the blockchain or when another device uses
one of our keys.
Signed-off-by: Harald Hoyer <harald@harald-hoyer.de>
DeterministicKeyChain.maybeLookAhead() would pre-generate a new key, for
every issued key, even if it is only one. If we replay the blockchain
and update the issuedKeys counter, maybeLookAhead() would trigger the
regeneration and resending of the bloom filter for every used key.
This patch adds a threshold, where keys are only pre-generated after
more keys are needed than the value of the threshold.
Signed-off-by: Harald Hoyer <harald@harald-hoyer.de>
Make a convenience ECKey.decrypt(KeyParameter) that doesn't require the keycrypter to be manually specified, as often (always?) the key knows it already.
Introduce a KeyBag interface that just contains findKeyBy* methods, then make Wallet implement it and change Transaction.signInputs to use it. Take out the encrypted-key specific stuff here: Transaction now requires unencrypted keys. Create a DecryptingKeyBag class that just forwards calls to Wallet and decrypts the returned keys. This decouples the signing code from Wallet a bit.
Should be all API compatible.