Bitcore 3000 is Three Times Faster for Bitcoin on the Web

Bitcore, our open-source javascript bitcoin library, now uses Fedor Indutny's highly optimized cryptography in the browser, which leads to significant speed improvements and an improved user experience for applications built with Bitcore.

How can I put bitcoin in my web page?

Although that's not the most frequently asked question about bitcoin, it's something a lot of developers ask when they make apps for bitcoin. Our answer to this is Bitcore, an open-source javascript bitcoin library. Bitcore not only provides access to the basic properties of the bitcoin protocol, but also has support for many BIPs and other features built on top of the bitcoin protocol that are useful for app makers.

Today we're happy to announce an improved version of Bitcore that has much faster cryptography in the browser.

Bitcore now uses Fedor Indutny's highly optimized bn.js and elliptic, which can create signatures more than 15 times faster than before. That's not a typo. Our new cryptography is more than an order of magnitude faster in the browser. Verifying signatures and deriving public keys see similar speed improvements. Cryptography is so widely used throughout bitcore that the entire library is now roughly three times faster overall in the browser.

This is possible because Fedor's code uses smarter algorithms designed for fast speeds, which our old code was not optimized for. This makes a huge difference for users of Bitcore.

Javascript crypto in the browser is still slower than on the server, but operations such as signing a transaction that would previously have the potential to lag the user experience now happen below the threshold of human sensitivity. Everything feels instant.

You can duplicate these tests for yourself with the browser bundle of Bitcore:

var bitcore = require('bitcore');  
var key = bitcore.Key.generateSync();

console.log('Pre-generating data');  
var data = [];  
for (var i = 0; i < 5000; i++) {  
  data[i] = bitcore.util.sha256('data ' + i);
};
console.log('Generating signatures');  
var time1 = Date.now();  
for (var i = 0; i < 5000; i++) {  
  var sig = key.signSync(data[i]);
};
var time2 = Date.now();  
console.log('Time: ' + (time2-time1)/1000);  

Bitcore 3000, so called because we now have over 3000 tests, is under heavy development by BitPay engineers, and regularly takes contributions from members of the community.
Check out Bitcore's official web page where you can get more information about the library, or the GitHub page for downloading the source code, creating issues, and issuing pull requests.

Get the latest updates to your inbox