Bitcoin Cash mainnet

in #bitcoin7 years ago (edited)

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.

images (3).jpeginformation 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.

image 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.

image
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.
imageInitial 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.

imageDialog 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!

imageThe 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 used

  • Updated 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