Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bitshares/bitsharesjs
JavaScript tools for BitShares Encryption and Serialization
https://github.com/bitshares/bitsharesjs
bitshares blockchain javascript js-library reactjs
Last synced: 3 months ago
JSON representation
JavaScript tools for BitShares Encryption and Serialization
- Host: GitHub
- URL: https://github.com/bitshares/bitsharesjs
- Owner: bitshares
- License: mit
- Created: 2017-01-19T14:18:35.000Z (almost 8 years ago)
- Default Branch: develop
- Last Pushed: 2024-04-14T03:28:02.000Z (7 months ago)
- Last Synced: 2024-04-14T10:51:43.082Z (7 months ago)
- Topics: bitshares, blockchain, javascript, js-library, reactjs
- Language: JavaScript
- Homepage: https://bitsharesjs.bitshares.org/
- Size: 12.1 MB
- Stars: 96
- Watchers: 20
- Forks: 147
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-bitshares - bitsharesjs - used by reference wallet. (Libraries / JavaScript Libraries)
README
# BitsharesJS (bitsharesjs)
Pure JavaScript Bitshares library for node.js and browsers. Can be used to construct, sign and broadcast transactions in JavaScript, and to easily obtain data from the blockchain via public apis.
Most of this code was written by [jcalfee](https://github.com/jcalfee), my work was mostly just repackaging to a discrete npm package.
[![npm version](https://img.shields.io/npm/v/bitsharesjs.svg?style=flat-square)](https://www.npmjs.com/package/bitsharesjs)
[![npm downloads](https://img.shields.io/npm/dm/bitsharesjs.svg?style=flat-square)](https://www.npmjs.com/package/bitsharesjs)## Setup
This library can be obtained through npm:
```
npm install bitsharesjs
```## Usage
Three sub-libraries are included: `ECC`, `Chain` and `Serializer`. Generally only the `ECC` and `Chain` libraries need to be used directly.
### Chain
This library provides utility functions to handle blockchain state as well as a login class that can be used for simple login functionality using a specific key seed.
#### Login
The login class uses the following format for keys:
```
keySeed = accountName + role + password
```Using this seed, private keys are generated for either the default roles `active, owner, memo`, or as specified. A minimum password length of 12 characters is enforced, but an even longer password is recommended. Three methods are provided:
```
generateKeys(account, password, [roles])
checkKeys(account, password, auths)
signTransaction(tr)
```The auths object should contain the auth arrays from the account object. An example is this:
```
{
active: [
["GPH5Abm5dCdy3hJ1C5ckXkqUH2Me7dXqi9Y7yjn9ACaiSJ9h8r8mL", 1]
]
}
```If checkKeys is successful, you can use signTransaction to sign a TransactionBuilder transaction using the private keys for that account.
#### State container
The Chain library contains a complete state container called the ChainStore. The ChainStore will automatically configure the `set_subscribe_callback` and handle any incoming state changes appropriately. It uses Immutable.js for storing the state, so all objects are return as immutable objects. It has its own `subscribe` method that can be used to register a callback that will be called whenever a state change happens.
The ChainStore has several useful methods to retrieve, among other things, objects, assets and accounts using either object ids or asset/account names. These methods are synchronous and will return `undefined` to indicate fetching in progress, and `null` to indicate that the object does not exist.
```
import {Apis} from "bitsharesjs-ws";
var {ChainStore} = require("bitsharesjs");Apis.instance("wss://eu.nodes.bitshares.ws", true).init_promise.then((res) => {
console.log("connected to:", res[0].network);
ChainStore.init().then(() => {
ChainStore.subscribe(updateState);
});
});let dynamicGlobal = null;
function updateState(object) {
dynamicGlobal = ChainStore.getObject("2.1.0");
console.log("ChainStore object update\n", dynamicGlobal ? dynamicGlobal.toJS() : dynamicGlobal);
}
```### ECC
The ECC library contains all the crypto functions for private and public keys as well as transaction creation/signing.
#### Private keys
As a quick example, here's how to generate a new private key from a seed (a brainkey for example):
```
var {PrivateKey, key} = require("bitsharesjs");let seed = "THIS IS A TERRIBLE BRAINKEY SEED WORD SEQUENCE";
let pkey = PrivateKey.fromSeed( key.normalize_brainKey(seed) );console.log("\nPrivate key:", pkey.toWif());
console.log("Public key :", pkey.toPublicKey().toString(), "\n");
```#### Transactions
TODO transaction signing example
## ESDoc (beta)
```bash
npm i -g esdoc esdoc-es7-plugin
esdoc -c ./esdoc.json
open out/esdoc/index.html
```## Binaries / Browserified bundles
Please have a [look here](https://github.com/bitshares/bitsharesjs/releases) to find your desired release.
If you want to build the binaries yourself you can clone this repository and run `npm install`. It will
create- Browserified version `build/bitsharesjs.js`
- Browserified and minified (babel) version `build/bitsharesjs.min.js`
- CommonJS version using webpack `build/bitsharesjs.cjs`