As we announced recently, we have decided to go live on Bitcoin Cash, and the transition from Bitcoin testnet involved a number of changes at various levels.
No room for misunderstanding
Since we have long been associated with Bitcoin, we wanted to be absolutely sure that new users trying the product for the frist time are crystal clear about what cryptcurrency is used in the application, that is why we introduced a salient dialog blocking any use of the wallet in the onboarding, until the user acknowledges the message.
information screen the users is confronted with on wallet page during on boarding
Porting Bcoin
The most low level change required was creating our own fork of the Bcoin toolkit, found at https://github.com/JoyStream/bcoin/tree/cash-spv, which we will write a separate post about at a later time.
Bcoin is a javascript toolkit for writing applications for Bitcoin
Using CashAddress
As of January 14th 2018, the Bitcoin Cash community chose to adopt a new address format called CashAddress. We have decided to adopt this address format explicitly and not accept legacy addresses from being used to send payments from the wallet.
We use CashAddress address format to receive funds
Since the legacy Bitcoin Cash address prefixes are identical to Bitcoin, we took this decision to protect users from inadvertently sending Bitcoin Cash to a Bitcoin Address.
A a conversion tool is available if absolutely required when using an external wallet that doesn’t yet support the new format. We highly advise using a bitcoin cash wallet that supports the new address format. https://cashaddr.bitcoincash.org/
Get those units right
We also had to go through the entire UI layer to replace BTC with BCH, and integrate the appropriate USD based price feed.
At your own risk!
Lastly, since we are now dealing with real funds — albeit that the user is in full control of, we wanted everyone to be aware that this is still highly experimental and early stage software, and thus that the user has to take full responsibility and risk of using the software.
Initial screen of the application asking the user to accept full responisibility of using such experimental software
Fixed pricing
One thing to be aware of, and which some users have complained about, is that you cannot directly control the price in the user interface just yet. Earlier versions of the software allowed users to set prices manually, and it led to a lot of confusion, partially because we did not solve the user interface challenge well enough. More over, in these early days, we have a severe liquidity problem when it comes to JoyStream peers, so we could some what ameliorate that problem by helping users coordinate on prices
The effective pricing that the software ships with is 20 satoshis per MB
In-app faucet
Thanks to the very generous Bitcoin Cash community, we were able to collect over $200 USD, as of 19 March 2018, from our Yours and announcement posts. This is going unabridged to our in-app on boarding faucet, allowing new users without Bitcoin Cash to try the software.
Dialog showing that you have claimed your complementary Bitcon Cash on boarding funds
Magnet link support
A very useful feature we had implemented a while back, but which was not fully working, is magnet link integration. As is, the application will install itself as the default application for opening BitTorrent magnet links when you install it. We have unfortunately not had time add a proper preference management system, where you could remove this if you want to, but since most other clients will prompt you to reacquire this default status, we thought it was OK for now.
New streaming server
Anyone who has tried prior versions of JoyStream has noticed that it failed to successfully play back a wide range of video formats. This was due to limitations inherent to the front end renderer we were using: render-media. Now the streaming happens over HTTP through an internal streaming server, which also supports streaming multiple torrents simultaneously, and playback happens using a native HTML5 video player pointed at this server.
We have yet to find media we could not play!
The new streaming server allows rendering of a much wider range of media
Changelog
Otherwise we have squashed an extensive list of bugs, and improved the application in various ways.
This is the full changelog.
Updated core native libraries to support Bitcoin Cash
Updated Wallet to use Bitcoin Cash mainnet
Added HTTP Server as backend for streaming Media Player
Support for playing more video formats by dropping render-media and relying on HTTP stream
Magnet Link support (finally)
Fix broken Drag-and-Drop functionality
Lowered all default transaction fee rates (payments, contracts and settlements)
Add paid download contracts to payments list
Fix chronological ordering of payments
Updated send/receive dialogs to only display and accept Bitcoin CashAddress format
Updated block explorer to bch.btc.comDisplay correct wallet total balance
Removed pending balance on wallet scene
*Added notice during onboarding to indicate that wallet uses Bitcoin Cash
Display fiat amount in payment rows
Fixed issue with calculating max amount to send in send payment dialog
Fixed issue with displaying duplicate payment in table when sending payments
Added support to claim free Bitcoin Cash
Replaced spinner (material-ui Circular Progress component) which was causing high CPU utilization
Fixed incorrect date displayed next to new unconfirmed payments, and newly confirmed payments
Introduced migration system
On first run migration will clear saved torrent buyer/seller terms so new default terms are usedUpdated Price Feed to get bitcoin cash ticker
Fixing issue with loading torrents from database without metadata
Fix various startup/shutdown issues while loading/saving torrents in database
Fix Correctly display spending amount on downloading scene
Made Spending and Revenue labels larger and added fiat amount
Removed torrent count label
Replaced BTC on labels to BCH
Added Terms acceptance scene