- Take care of posts using older public key when key is replaced. notes: not very difficult, GetTransaction must receive a maximum block number to search the transaction (we get this from post["height"]). another txIndex should be set to speedup lookup (key in db includes the number of the block that changed tx so previous one can be found). pseudocode: getTxIndex( key = "userX" ) => block h contains this tx; while( h > max_h ) getTxIndex( "userX_h" ) => block h contains the previous tx => GetTransation: new parameter maxHeight done! - Until old public key is properly used, disable banning torrent peers due to bad piece hashes. note: torrent.cpp line 3286 (function piece_failed), iteration to ban peers is disabled (continue). - Count UTF8 chars in acceptSignedPost to proper limit the 140 characters. - Encrypt user_data (which contains all DMs) - Test wallet encrypt to see if it still works from original bitcoin implementation and what are the implications to our code. - Rescan directmessages after importing a privatekey (importprivkey) - Check libtorrent's limitation on the number of pieces (max_pieces in piece_picker.hpp = 1<<19) Since post number is constrained by max of 288 posts per day in average, that means we have 5 years to think about it (for the really heavy users). - Besides increasing the maximum number of pieces, a more pressing issue to save bandwidth and torrent download time would be to define the first piece to download/store locally. People don't need to maintain the entire post history for everybody they follow, they could just keep the last ones. This has to be implemented. - Move all crypto to javascript, store only encrypted version of the privatekey (which would be decrypted only in browser memory). getposts may obtain all DMs encrypted to browser, another newpostmsg needs to be provided to receive posts with signature field added. - Store a dht resource "publickey" containing not only the public key itself but also information needed to validate it by a lightweight client. That includes: block hash, block height and partial merkle tree inside that block. This resource propagation cannot be sent right after user registration for obvious reasons (no block yet, other nodes wouldn't accept the signed dht put). - Discuss and implement the acceptable level of spam per day (priorizing localization). DONE (except for the discussion part...) - Implement the mention forwarding mechanism discussed in the paper so user don't need to do polling and can also be sure to receive all mentions. - Implement hashtag "storage-less" torrents for post distribution. - Define expiration policies to dht stored values. Currently all keys are refreshed every hour which, according to previous bittorrent research, would be enough to keep data available forever (with high probability). twister also persists keys to disk. As userbase increases, old post storage and unreliable multivalued keys should better expire. Since those posts include the height and time, a policy may me defined. => Implemented shouldDhtResourceExpire() which is tested on initialization but not really used yet. - Check stored dht values if their signature is still valid before trying to refresh another node. Key pair might have changed and currently we receive a lot of errors from other nodes. - save_file() must truncate file. - Save lastk field to post so torrent-less navigation through posts is possible. => DONE - Implement dht-to-torrent gateway, the "swarm" resource (so poster may not need to be member of his own torrent) - Estimate number of online followers by quering the "tracker" resource (implement a value within this resource to report the number of torrent peers) - Define and enforce html directory to serve from. Do installation scripts. - Don't accept dht "post"+k if k violates the validatePostNumberForUser() rule.