@digitalbits-blockchain/xdb-digitalbits-sdk
Version:
@digitalbits-blockchain/xdb-digitalbits-sdk is a library for working with the DigitalBits Frontier server.
206 lines (147 loc) • 7.15 kB
Markdown
@digitalbits-blockchain/xdb-digitalbits-sdk is a Javascript library for communicating with a
[DigitalBits Frontier server](https://github.com/xdbfoundation/go/tree/master/services/frontier).
It is used for building DigitalBits apps either on Node.js or in the browser.
It provides:
- a networking layer API for Frontier endpoints.
- facilities for building and signing transactions, for communicating with a
DigitalBits Frontier instance, and for submitting transactions or querying network
history.
### @digitalbits-blockchain/xdb-digitalbits-sdk vs @digitalbits-blockchain/xdb-digitalbits-base
@digitalbits-blockchain/xdb-digitalbits-sdk is a high-level library that serves as client-side API for Frontier.
[@digitalbits-blockchain/xdb-digitalbits-base](https://github.com/xdbfoundation/xdb-digitalbits-base) is lower-level
library for creating DigitalBits primitive constructs via XDR helpers and wrappers.
**Most people will want @digitalbits-blockchain/xdb-digitalbits-sdk instead of @digitalbits-blockchain/xdb-digitalbits-base.** You should only
use @digitalbits-blockchain/xdb-digitalbits-base if you know what you're doing!
If you add `@digitalbits-blockchain/xdb-digitalbits-sdk` to a project, **do not add `@digitalbits-blockchain/xdb-digitalbits-base`!** Mis-matching
versions could cause weird, hard-to-find bugs. `@digitalbits-blockchain/xdb-digitalbits-sdk` automatically
installs `@digitalbits-blockchain/xdb-digitalbits-base` and exposes all of its exports in case you need them.
> **Important!** The Node.js version of the `@digitalbits-blockchain/xdb-digitalbits-base` (`@digitalbits-blockchain/xdb-digitalbits-sdk` dependency) package
> uses the [`sodium-native`](https://www.npmjs.com/package/sodium-native) package as
> an [optional dependency](https://docs.npmjs.com/files/package.json#optionaldependencies). `sodium-native` is
> a low level binding to [libsodium](https://github.com/jedisct1/libsodium),
> (an implementation of [Ed25519](https://ed25519.cr.yp.to/) signatures).
> If installation of `sodium-native` fails, or it is unavailable, `@digitalbits-blockchain/xdb-digitalbits-base` (and `@digitalbits-blockchain/xdb-digitalbits-sdk`) will
> fallback to using the [`tweetnacl`](https://www.npmjs.com/package/tweetnacl) package implementation.
>
> If you are using `@digitalbits-blockchain/xdb-digitalbits-sdk`/`@digitalbits-blockchain/xdb-digitalbits-base` in a browser you can ignore
> this. However, for production backend deployments you should be
> using `sodium-native`. If `sodium-native` is successfully installed and working the
> `DigitalBitsSdk.FastSigning` variable will return `true`.
## Quick start
Using npm to include @digitalbits-blockchain/xdb-digitalbits-sdk in your own project:
```shell
npm install --save @digitalbits-blockchain/@digitalbits-blockchain/xdb-digitalbits-sdk
```
## Install
### To use as a module in a Node.js project
1. Install it using npm:
```shell
npm install --save @digitalbits-blockchain/xdb-digitalbits-sdk
```
2. require/import it in your JavaScript:
```js
var DigitalBitsSdk = require('@digitalbits-blockchain/xdb-digitalbits-sdk');
```
### To develop and test @digitalbits-blockchain/xdb-digitalbits-sdk itself
1. Clone the repo:
```shell
git clone https://github.com/xdbfoundation/xdb-digitalbits-sdk.git
```
2. Install dependencies inside xdb-digitalbits-sdk folder:
```shell
cd xdb-digitalbits-sdk
npm install
```
3. Install Node 14
Because we support the latest maintenance version of Node, please install and develop on Node 14 so you don't get surprised when your code works locally but breaks in CI.
Here's how to install `nvm` if you haven't: https://github.com/creationix/nvm
```shell
nvm install
# if you've never installed 14 before you'll want to re-install yarn
npm install -g yarn
```
If you work on several projects that use different Node versions, you might it
helpful to install this automatic version manager:
https://github.com/wbyoung/avn
4. Observe the project's code style
While you're making changes, make sure to run the linter-watcher to catch any
linting errors (in addition to making sure your text editor supports ESLint)
```shell
node_modules/.bin/gulp watch
````
### How to use with React-Native
1. Add the following postinstall script:
```
yarn rn-nodeify --install url,events,https,http,util,stream,crypto,vm,buffer --hack --yarn
```
2. `yarn add -D rn-nodeify`
3. Uncomment `require('crypto')` on shim.js
4. `react-native link react-native-randombytes`
5. Create file `rn-cli.config.js`
```
module.exports = {
resolver: {
extraNodeModules: require("node-libs-react-native"),
},
};
```
6. Add `import "./shim";` to the top of `index.js`
7. `yarn add @digitalbits-blockchain/xdb-digitalbits-sdk`
#### Using in an Expo managed workflow
1. Add the following postinstall script:
```
yarn rn-nodeify --install process,url,events,https,http,util,stream,crypto,vm,buffer --hack --yarn
```
2. `yarn add -D rn-nodeify`
3. Add `import "./shim";` to the your app's entry point (by default `./App.js`)
4. `yarn add @digitalbits-blockchain/xdb-digitalbits-sdk`
5. `expo install expo-random`
At this point, the digitalbits SDK will work, except that `DigitalBitsSdk.Keypair.random()` will throw an error. So to work around this you can create your own method to generate a random keypair like this:
```javascript
import * as Random from 'expo-random';
import DigitalBitsSdk from '@digitalbits-blockchain/xdb-digitalbits-sdk';
const generateRandomKeypair = () => {
const randomBytes = Random.getRandomBytes(32);
return DigitalBitsSdk.Keypair.fromRawEd25519Seed(Buffer.from(randomBytes));
};
```
## Usage
For information on how to use @digitalbits-blockchain/xdb-digitalbits-sdk, take a look at [the
documentation](https://xdbfoundation.github.io/xdb-digitalbits-sdk/), or [the
examples](https://github.com/xdbfoundation/xdb-digitalbits-sdk/tree/master/docs/reference).
There is also Frontier REST API Documentation
[here](https://developers.digitalbits.io/frontier/reference/index.html).
## Testing
To run all tests:
```shell
gulp test
```
To run a specific set of tests:
```shell
gulp test:node
gulp test:browser
```
To generate and check the documentation site:
```shell
# install the `serve` command if you don't have it already
npm install -g serve
# generate the docs files
npm run docs
# get these files working in a browser
cd jsdoc && serve .
# you'll be able to browse the docs at http://localhost:5000
```
## Documentation
Documentation for this repo lives in
[Developers site](https://github.com/xdbfoundation/xdb-digitalbits-sdk/blob/master/docs/reference/readme.md).
## Publishing to npm
```
npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease]
```
A new version will be published to npm **and** Bower by GitHub actions.
npm >= 2.13.0 required. Read more about
[npm version](https://docs.npmjs.com/cli/version).
## License
@digitalbits-blockchain/xdb-digitalbits-sdk is licensed under an Apache-2.0 license. See the
[LICENSE](https://github.com/xdbfoundation/xdb-digitalbits-sdk/blob/master/LICENSE) file
for details.