Here is a brief list of things that still need to be done. More unit tests: - Create a MockNetworkConnection and use it to test the Peer. API: - Reorganize the package layout to be more modular. - Support multiple active wallets. - Allow sorting of transactions by time. Protocol: - Start up faster - Store a block locator in the persisted chain - Use the getheaders command to speed up the initial chain download - Implement tx fees. - Longer term potentially add a getmerklebranch protocol command so we can check 0-confirmation transactions. - Support PeerGroups for holding open/using multiple connections at once. Examples/documentation: - Implement a simple Swing GUI payment app. Cleanup: - Find a way to avoid some horrid hacks when shutting down the network connection. - Implement a BitCoin class that encapsulates a BigInteger and formatting. - Make NetworkParameters use subclasses instead of static methods to construct. ========== Impacts from Steves changes: - Reformat affected files - JavaDocs for the c'tors that take parseLazy/parseRetain - Copyright header/correct author for EmptyMessage/ChildMessage - Remove superfluous empty lines in ListMessage.java - Remove VersionMessage check in Message serialization roundtrip checks - Delete dead code in Message.checkParsed - LazyParseByteCacheTest: - copyright/comments/unused things - debug prints - some redundant asserts - huge functions - dead code - Magic number 36 in ListMessage.parseLite - Manipulator.java needs docs - Assert in Message c'tor needs an English version. - Spelling in PeerAddress.bitcoinSerializeToStream - SpeedTest has a lot of unused fields, large functions. See if it can be simplified/densified. - Caching immutable lists? - Dead code in Transaction.parse - javadocs on Transaction{Input,Output,} getters - Delete the code related to deduping. The new network management code to be checked in later makes it unnecessary. Also remove singleDigest as a result (it duplicates Sha256Hash). Block.java: - Reformat - Replace magic number 80 with HEADER_SIZE_BYTES in Block.parseTransactions - The parseLight stuff isn't clear without referring to superclass. - Delete dead code in writeTransactions - checkParse{Header,Transactions} should be maybeParse... - immutableTransactions is misleading, it allows you to mutate the contents. - Unit-test only getters should be package private.