From Bitmessage Wiki
Jump to navigation Jump to search

PyBitmessage Changelog


  • Usability:
    • many minor usability improvements, in particular helpful for beginners
    • get rid of confusing log messages
    • improved feedback when busy during shutdown
    • UI feedback when problems with proxy
    • UI feedback when local time is wrong
    • UI feedback when C PoW module is not available
    • folder loading performance improved
    • translations updated
    • chan join/create interface redesigned
    • can select OpenCL vendor if multiple are available (previously it would have crashed)
    • locale initialisation fixes
    • contact support form and About dialog show the GIT head
    • added (setuptools) for easier installation
    • gentle warning if sending to a chan with a too low TTL
    • message retransmit timing now works as the description
  • Fixes:
    • networking subsystem stability fixes
    • multiprocessing python PoW fixed
    • message parser fixes
    • many smaller fixes
    • OpenBSD listening socket fix (works IPv4-only mode instead of not at all)
  • Backend:
    • try to auto-build PoW module
    • networking subsystem performance improvements
    • refactoring of configuration interface, inventory, downloading and uploading tracking, known nodes and other minor parts
    • refactoring to reduce circular imports and global variables
    • support for OpenSSL 1.1.0 and LibreSSL
    • some network parameters configurable, but mostly only through directly editing keys.dat
    • network settings allow an optimised bootstrap provider mode
  • Developers:
    • extended encoding available for testing. Use it by holding Shift while clicking on Send
    • extended encoding can be extended by adding new classes to the "messagetypes" directory
    • directory structure reorganisation to get rid of obsolete code
  • Linux:
    • detects Ubuntu, Debian, Fedora, openSUSE, Gentoo and Guix
  • FreeBSD/OpenBSD:
    • separate Makefile for BSD make
    • C PoW core count detection fixes for OpenBSD
    • detects FreeBSD and OpenBSD
  • Windows:
    • improved error handling
    • separate Makefile for Microsoft Visual C++
    • pyinstaller spec file updated
    • 64bit binary does not require MSVC Redistributable 2012 anymore and is mostly built with mingw instead of MSVC
    • updated Python to 2.7.13 and OpenSSL to 1.0.2j/1.0.2k
  • OSX:
    • binary works with OpenCL
    • updated to Python 2.7.13 and OpenSSL 1.0.2k
  • Infrastructure:
    • 3 additional bootstrap nodes
    • new server for building/testing
    • transifex webhooks automate translation workflow
    • integration with for code quality checking


  • Translation update and localisation fixes
  • Minor bug fixes
  • Minor UI improvements
  • Namecoin integration fixed and improved
  • SMTP server and client interface
  • Tor hidden service support
  • C PoW builds and runs on *BSD
  • Windows binary:
    • fixed build
    • upgraded to Python 2.7.12 and OpenSSL 1.0.2h
    • 64bit binary available for download
    • self-built PyInstaller bootloader should trigger fewer antivirus false positives
  • Mac OSX binary:
    • upgraded to Python 2.7.12 and OpenSSL 1.0.2h


  • QT interface overhaul
  • Opportunistic TLS support
  • Mitigation of some deanonymisation attacks
  • C (using OpenSSL) and OpenCL PoW modules
  • Performance improvements (backend as well as QT GUI)
  • UPnP support
  • Improved bootstrapping over Tor
  • Translation updates
  • Lots of tiny bugfixes and some minor security improvements
  • Integration of email gateway


  • Added ability to limit network transfer rate
  • Updated to Protocol Version 3
  • Removed use of memoryview so that we can support python 2.7.3
  • Make use of l10n for localizations


  • Support pyelliptic's updated HMAC algorithm. We'll remove support for the old method after an upgrade period.
  • Improved version check
  • Refactored decodeBase58 function
  • Ignore duplicate messages
  • Added bytes received/sent counts and rate on the network information tab
  • Fix unicode handling in 'View HTML code as formatted text'
  • Refactor handling of packet headers
  • Use pointMult function instead of arithmetic.privtopub since it is faster
  • Fixed issue where client wasn't waiting for a verack before continuing on with the conversation
  • Fixed CPU hogging by implementing tab-based refresh improvements
  • Added curses interface
  • Added support for IPv6
  • Added a 'trustedpeer' option to keys.dat
  • Limit maximum object size to 20 MB
  • Support email-like > quote characters and reply-below-quote
  • Added Japanese and Dutch language files; updated Norwegian and Russian languages files


  • Added Norwegian, Chinese, and Arabic translations
  • sock.sendall function isn't atomic. Let sendDataThread be the only thread which sends data.
  • Moved API code to
  • Populate comboBoxSendFrom when replying
  • Added option to show recent broadcasts when subscribing
  • Fixed issue: If Windows username contained an international character, Bitmessage wouldn't start
  • Added some code for FreeBSD compatibility
  • Moved responsibility for processing network objects to the new ObjectProcessorThread
  • Refactored main QT module
    • Moved popup menus initialization to separate methods
    • Simplified inbox loading
    • Moved magic strings to the model scope constants so they won't be created every time.
  • Updated list of defaultKnownNodes
  • Fixed issue: [Linux] When too many messages arrive too quickly, exception occurs: "Exceeded maximum number of notifications"
  • Fixed issue: creating then deleting an Address in short time crashes
  • Refactored code which displays messages to improve code readability
  • load "Sent To" label from subscriptions if available
  • Removed code to add chans to our address book as it is no longer necessary
  • Added identicons
  • Modified addresses.decodeAddress so that API command decodeAddress works properly
  • Added API commands createChan, joinChan, leaveChan, deleteAddress
  • In pyelliptic, check the return value of RAND_bytes to make sure enough random data was generated
  • Don't store messages in UI table (and thus in memory), pull from SQL inventory as needed
  • Fix typos in API commands addSubscription and getInboxMessagesByAddress
  • Add feature in settings menu to give up resending a message after a specified period of time


  • Fixed whitelist bug
  • Fixed chan bug
    • Added addressversion field to pubkeys table
    • Sending messages to a chan no longer uses anything in the pubkeys table
    • Sending messages to yourself is now fully supported
  • Change _verifyAddress function to support v4 addresses


  • Raised default demanded difficulty from 1 to 2 for new addresses
  • Added v4 addresses: pubkeys are now encrypted and tagged in the inventory
  • Use locks when accessing dictionary inventory
  • Refactored the way inv and addr messages are shared
  • Give user feedback when disk is full
  • Added chan true/false to listAddresses results
  • When replying using chan address, send to whole chan not just sender
  • Refactored of the way PyBitmessage looks for interesting new objects in large inv messages from peers
  • Show inventory lookup rate on Network Status tab
  • Added SqlBulkExecute class so we can update inventory with only one commit
  • Updated Russian translations
  • Move duplicated SQL code into helper
  • Allow specification of alternate settings dir via BITMESSAGE_HOME environment variable
  • Removed use of gevent. Removed
  • Added Sip and PyQt to includes in
  • Show number of each message type processed in the API command clientStatus
  • Use fast PoW unless we're explicitly a frozen (binary) version of the code
  • Enable user-set localization in settings
  • Fix Archlinux package creation
  • Fallback to language only localization when region doesn't match
  • Fixed brew install instructions
  • Added German translation
  • Made inbox and sent messages table panels read-only
  • Allow inbox and sent preview panels to resize
  • Count RE: as a reply header, just like Re: so we don't chain Re: RE:
  • Fix for traceback on OSX
  • Added backend ability to understand shorter addresses
  • Convert 'API Error' to raise APIError()
  • Added option in settings to allow sending to a mobile device (app not yet done)
  • Added ability to start daemon mode when using Bitmessage as a module
  • Improved the way client detects locale
  • Added API commands: getInboxMessageIds, getSentMessageIds, listAddressBookEntries, trashSentMessageByAckData, addAddressBookEntry, deleteAddressBookEntry, listAddresses2, listSubscriptions
  • Set a maximum frequency for playing sounds
  • Show Invalid Method error in same format as other API errors
  • Update status of separate broadcasts separately even if the sent data is identical
  • Added Namecoin integration
  • Internally distinguish peers by IP and port
  • Inbox message retrieval API functions now also returns read status


  • Added right-click option to mark a message as unread
  • Prompt user to connect at first startup
  • Install into /usr/local by default
  • Add a missing `rm -f` to the uninstall task.
  • Use system text color for enabled addresses instead of black
  • Added support for Chans
  • Start storing msgid in sent table
  • Optionally play sounds on connection/disconnection or when messages arrive
  • Adding configuration option to listen for connections when using SOCKS
  • Added packaging for multiple distros (Arch, Puppy, Slack, etc.)
  • Added Russian translation
  • Added search support in the UI
  • Added 'make uninstall'
  • To improve OSX support, use PKCS5_PBKDF2_HMAC_SHA1 if PKCS5_PBKDF2_HMAC is unavailable
  • Added better warnings for OSX users who are using old versions of Python
  • Repaired debian packaging
  • Altered Makefile to avoid needing to chase changes
  • Added logger module
  • Added bgWorker class for background tasks
  • Added use of gevent module
  • On not-Windows: Fix insecure keyfile permissions
  • Fix 100% CPU usage issue


  • Linux: Store config files in $XDG_CONFIG_HOME
  • Added a new global variable user option: doTimingAttackMitigation
  • Moved a variety of classes and functions out of and to their own modules
  • New API command: getSentMessageByAckData
  • Modified the getAllSentMessages and getSentMessageById commands to return ackData
  • API commands to get messages now return actual encoding type
  • Bugfix: Unicode chars in localtime prevented the gui from starting
  • Added 'Save message as...' option in Inbox
  • Added OS X Build scripts
  • Added option to subscribe to an address in your address book
  • Added getInboxMessageById API command
  • Updated icons to have sRGB profile to prevent warnings
  • Added French translation
  • Switched addr, msg, broadcast, and getpubkey message types to 8 byte time. Last remaining type is pubkey.
  • Added tooltips to show the full subject of messages
  • Added Maximum Acceptable Difficulty fields in the settings
  • Send out pubkey immediately after generating deterministic addresses rather than waiting for a request


  • Remove inbox item from GUI when using API command trashMessage
  • Add missing trailing semicolons to pybitmessage.desktop
  • Ensure $(DESTDIR)/usr/bin exists
  • Update Makefile to correct sandbox violations when built via Portage (Gentoo)
  • Fix message authentication bug


  • Removed multi-core proof of work as the multiprocessing module does not work well with pyinstaller's --onefile option.


  • Bugfix: Remove remaining references to the old myapp.trayIcon
  • Refactored message status-related code. API function getStatus now returns one of these strings: notfound, msgqueued, broadcastqueued, broadcastsent, doingpubkeypow, awaitingpubkey, doingmsgpow, msgsent, or ackreceived
  • Moved proof of work to low-priority multi-threaded child processes
  • Added menu option to delete all trashed messages
  • Added inv flooding attack mitigation
  • On Linux, when selecting Show Bitmessage, do not maximize automatically
  • Store tray icons in


  • Added new API commands: getDeterministicAddress, addSubscription, deleteSubscription
  • TCP Connection timeout for non-fully-established connections now 20 seconds
  • Don't update the time we last communicated with a node unless the connection is fully established. This will allow us to forget about active but non-Bitmessage nodes which have made it into our knownNodes file.
  • Prevent incoming connection flooding from crashing singleListener thread. Client will now only accept one connection per remote node IP
  • Bugfix: Worker thread crashed when doing a POW to send out a v2 pubkey (bug introduced in 0.3.0)
  • Wrap all sock.shutdown functions in error handlers
  • Put all 'commit' commands within SQLLocks
  • Bugfix: If address book label is blank, Bitmessage wouldn't show message (bug introduced in 0.3.0)
  • Messaging menu item selects the oldest unread message
  • Standardize on 'Quit' rather than 'Exit'
  • [OSX] Try to seek homebrew installation of OpenSSL
  • Prevent multiple instances of the application from running
  • Show 'Connected' or 'Connection Lost' indicators
  • Use only 9 half-open connections on Windows but 32 for everyone else
  • Added appIndicator (a more functional tray icon) and Ubuntu Messaging Menu integration
  • Changed Debian install directory and run script name based on Github issue #135


  • Added new API function: getStatus
  • Added error-handling around all sock.sendall() functions in the receiveData thread so that if there is a problem sending data, the threads will close gracefully
  • Abandoned and removed the connectionsCount data structure; use the connectedHostsList instead because it has proved to be more accurate than trying to maintain the connectionsCount
  • Added daemon mode. All UI code moved into a module and many shared objects moved into
  • Truncate display of very long messages to avoid freezing the UI
  • Added encrypted broadcasts for v3 addresses or v2 addresses after 2013-05-28 10:00 UTC
  • No longer self.sock.close() from within receiveDataThreads, let the sendDataThreads do it
  • Swapped out the v2 announcements subscription address for a v3 announcements subscription address
  • Vacuum the messages.dat file once a month: will greatly reduce the file size
  • Added a settings table in message.dat
  • Implemented v3 addresses: pubkey messages must now include two var_ints: nonce_trials_per_byte and extra_bytes, and also be signed. When sending a message to a v3 address, the sender must use these values in calculating its POW or else the message will not be accepted by the receiver.
  • Display a privacy warning when selecting 'Send Broadcast from this address'
  • Added gitignore file
  • Added code in preparation for a switch from 32-bit time to 64-bit time. Nodes will now advertise themselves as using protocol version 2.
  • Don't necessarily delete entries from the inventory after 2.5 days; leave pubkeys there for 28 days so that we don't process the same ones many times throughout a month. This was causing the 'pubkeys processed' indicator on the 'Network Status' tab to not accurately reflect the number of truly new addresses on the network.
  • Use 32 threads for outgoing connections in order to connect quickly
  • Fix typo when calling os.environ in the sys.platform=='darwin' case
  • Allow the cancelling of a message which is in the process of being sent by trashing it then restarting Bitmessage
  • Bug fix: can't delete address from address book


  • Fixed Ubuntu & OS X issue: Bitmessage wouldn't receive any objects from peers after restart.
  • Inventory flush to disk when exiting program now vastly faster.
  • Fixed address generation bug (kept Bitmessage from restarting).
  • Improve deserialization of messages before processing.
  • Change to help Macs find OpenSSL the way Unix systems find it.
  • Do not share or accept IPs which are in the private IP ranges.
  • Added time-fuzzing to the embedded time in pubkey and getpubkey messages.
  • Added a knownNodes lock to prevent an exception from sometimes occurring when saving the data-structure to disk.
  • Show unread messages in bold and do not display new messages automatically; let user click it.
  • Support selecting multiple items in the inbox, sent box, and address book.
  • Use delete key to trash Inbox or Sent messages.
  • Display richtext(HTML) messages from senders in address book or subscriptions (although not pseudo-mailing-lists; use new right-click option).
  • Support enabling and disabling subscriptions.
  • Trim spaces from the beginning and end of addresses when adding to address book, subscriptions, and blacklist.
  • Improved the display of the time for foreign language users.


  • Added API. See API Reference.
  • Added error handling for the case where the client tries to send a message from an address for which the human has deleted the keys.
  • Improved GUI messages when doing work (or pending work) for broadcast messages.
  • Added error handling for the case where the proof of work takes no measurable time (caused a divide by zero error).


  • New Feature: Pseudo-mailing-lists (available by right-clicking one of your addresses)
  • New Feature: Portable Mode (available in the settings)
  • Added missing context menu on the blacklist tab


  • Bugfix-only release: Program improperly handles other nodes claiming to be in stream 0 (issue appeared when implementing IPv6). UI Freezes.


  • Prevent user from sending messages to themselves since the client cannot process its own getpubkey or msg messages
  • Do the pubkey POW and broadcast it directly after generating a new address


  • Defined rules for nodes to follow for storing and relaying pubkeys. Nodes now store keys for 4 weeks then delete them. They also will not accept pubkeys older than 4 weeks; the owner will have to retransmit them if they are needed.
  • Added 'fuzzing' to the time embedded in msg and broadcast messages.
  • Added timing attack mitigation to the function that processes incoming pubkeys
  • Added a new file: messages.dat which can be independently used to print information stored in the messages.dat file to the console.
  • Users who run the software for the first time will now be subscribed by default to a Bitmessage address used to send announcements.


  • Don't use DNS-based bootstrapping method if user is connecting via SOCKS; just skip it. Hopefully the nodes listed in defaultKnownNodes are still up.
  • Implemented timing attack mitigation measure


  • Added ability to send Sent items to the trash
  • Keep track of which objects each peer is already aware and don't advertise objects that they already know about


  • Major upgrade to ECC:
    • Elliptic curve secp256k1 is used for Bitmessage's signing and asymetric encryption. Keys are interchangable between Bitmessage and Bitcoin.
    • Keys stored in Wallet Import Format in the keys.dat file
    • Deterministic addresses
    • Addresses are now shorter: Bitmessage now supports 18 and 19 byte RIPE addresses where the missing 1 or 2 bytes are assumed to be zeros.
  • Moved pubkey POW responsibility from the receiveData thread to the singleWorker thread


  • Added DNS-based bootstrap method so that updating defaultKnownNodes doesn't require a code push.


  • Client now checks whether a getpubkey message has the correct time before storing in inventory and also uses embeddedTime rather than system time (the way it is done for all other messages). This was a bug that didn't cause any ill-effect.
  • Fix so that today's Bitmessage client will properly handle future versions of Bitmessage addresses
  • Updated defaultKnownNodes


  • Added support for SOCKS4a and SOCKS5 proxies
  • Adjusted UI so that it looks appropriate on OS X
  • Changed UI to accept Bitmessage addresses which lack a "BM-". This makes copying and pasting easier.
  • Fixed OS X issue: if user minimized client to tray then restored, segmentation fault occured
  • Added locks to prevent ill-effect if the client receives the same object from two different nodes at the exact same time
  • Commented out code that prevents the client from accepting a second connection from the same IP since this prevents users from running two clients within the same local network. When the Bitmessage network grows, this code will be re-enabled.


  • Updated defaultKnownNodes so people who download Bitmessage on a fresh machine can bootstrap
  • Sort received-message-time by actual time rather than by time-interpreted-alphabetically


  • Fixed line break display issue
  • Updated defaultKnownNodes so people who download Bitmessage on a fresh machine can bootstrap
  • Bug fix: If subject in received message contained international characters, reply button wouldn't work completely


  • Fixed bug that prevented user from deleting a recently received message
  • On the "Send" tab, select your address automatically if you have only one
  • Rewrote the SQLite version check more liberally accept SQLite revision numbers
  • Fixed "reply" functionality
  • Removed PyObjc dependency for OSX


  • Initial release