1
0
mirror of https://github.com/bigchaindb/js-bigchaindb-driver.git synced 2024-11-24 11:01:28 +01:00
Official BigchainDB JavaScript driver for Node.js and the browser
Go to file
2022-02-16 08:17:44 +01:00
.ci Add SPDX license info strings to all source files 2018-08-10 12:49:26 +02:00
.github/workflows ci: extends wait delay 2022-02-16 08:17:44 +01:00
.husky fix: update release-it config 2021-03-10 08:49:03 +01:00
compose merge 2018-03-29 19:02:46 +02:00
docs Change Travis CI URLs to use .com 2018-12-11 20:25:16 +01:00
examples fix: update example 2021-03-10 08:49:07 +01:00
media Tried to change permissions of all files to 664 2017-09-22 10:15:02 +02:00
plugins fix: run lint 2021-03-10 08:49:10 +01:00
src fix: use abort-controller pkg for node <15 2022-02-16 08:17:30 +01:00
test feat: add limit query for transaction search requests 2022-02-15 14:11:30 +01:00
types feat: export extra types 2022-02-15 14:13:13 +01:00
.babelrc fix: update babel and lint config 2021-03-10 08:48:53 +01:00
.eslintignore fix: lint config 2021-03-10 08:49:09 +01:00
.eslintrc.js chore: update lint rules 2022-02-15 08:07:38 +01:00
.gitignore Release 4.1.2 2020-03-11 23:06:25 +03:00
.npmignore Release 4.1.2 2020-03-11 23:06:25 +03:00
.travis.yml fix: update travis config 2021-03-10 08:48:59 +01:00
API.md fix: add delegateSignatureAsync method 2021-03-11 13:04:17 +01:00
CODE_OF_CONDUCT.md Point Code of Contuct page to main BDB repo 2018-12-11 20:26:57 +01:00
CONTRIBUTING.rst Add SPDX license info strings to all source files 2018-08-10 12:49:26 +02:00
docker-compose.yml update tendermint version in docker compose 2020-12-17 18:06:01 +01:00
LICENSE Tried to change permissions of all files to 664 2017-09-22 10:15:02 +02:00
LICENSE-docs Reformat LICENSE-docs for readability 2018-08-10 14:50:09 +02:00
package.json fix: use abort-controller pkg for node <15 2022-02-16 08:17:30 +01:00
README.md fix: improve imports 2021-03-10 16:31:43 +01:00
RELEASE_PROCESS.md fix: regenerate doc 2021-03-10 08:48:56 +01:00
webpack.common.js chore: update wepback config 2022-02-15 08:06:05 +01:00
webpack.config.js chore: update wepback config 2022-02-15 08:06:05 +01:00
webpack.development.js chore: update wepback config 2022-02-15 08:06:05 +01:00
webpack.parts.js chore: update wepback config 2022-02-15 08:06:05 +01:00
webpack.production.js Add SPDX license info strings to all source files 2018-08-10 12:49:26 +02:00

js-bigchaindb-driver

Official JavaScript driver for BigchainDB to create transactions in Node.js and the browser.

Join the chat at https://gitter.im/bigchaindb/js-bigchaindb-driver npm codecov js ascribe Build Status Greenkeeper badge

Compatibility

BigchainDB Server BigchainDB JavaScript Driver
0.10 0.1.x
1.0.0 0.3.x
1.3.x 3.x.x
>= 2.0.0 4.x.x

Breaking changes

  • Version 4.0 of BigchainDB JavaScript Driver makes the driver compatible with BigchainDB 2.0. There are new functions for sending off transactions along with other changes. Check older versions
  • Version 3.2 of BigchainDB JavaScript Driver introduces a new way of creating transfer transactions. Check older versions

Table of Contents


Installation and Usage

npm install bigchaindb-driver
const driver = require('bigchaindb-driver')
// or ES6+
import driver from 'bigchaindb-driver'

Example: Create a transaction

const driver = require('bigchaindb-driver')
const base58 = require('bs58');
const crypto = require('crypto');
const { Ed25519Sha256 } = require('crypto-conditions');

// BigchainDB server instance (e.g. https://example.com/api/v1/)
const API_PATH = 'http://localhost:9984/api/v1/'

// Create a new keypair.
const alice = new driver.Ed25519Keypair()

// Construct a transaction payload
const tx = driver.Transaction.makeCreateTransaction(
    // Define the asset to store, in this example it is the current temperature
    // (in Celsius) for the city of Berlin.
    { city: 'Berlin, DE', temperature: 22, datetime: new Date().toString() },

    // Metadata contains information about the transaction itself
    // (can be `null` if not needed)
    { what: 'My first BigchainDB transaction' },

    // A transaction needs an output
    [ driver.Transaction.makeOutput(
            driver.Transaction.makeEd25519Condition(alice.publicKey))
    ],
    alice.publicKey
)

// Sign the transaction with private keys
const txSigned = driver.Transaction.signTransaction(tx, alice.privateKey)

// Or use delegateSignTransaction to provide your own signature function
function signTransaction() {
    // get privateKey from somewhere
    const privateKeyBuffer = Buffer.from(base58.decode(alice.privateKey))
    return function sign(serializedTransaction, input, index) {
        const transactionUniqueFulfillment = input.fulfills ? serializedTransaction
                .concat(input.fulfills.transaction_id)
                .concat(input.fulfills.output_index) : serializedTransaction
        const transactionHash = crypto.createHash('sha3-256').update(transactionUniqueFulfillment).digest()
        const ed25519Fulfillment = new Ed25519Sha256();
        ed25519Fulfillment.sign(transactionHash, privateKeyBuffer);
        return ed25519Fulfillment.serializeUri();
    };
}
const txSigned = driver.Transaction.delegateSignTransaction(tx, signTransaction())

// Send the transaction off to BigchainDB
const conn = new driver.Connection(API_PATH)

conn.postTransactionCommit(txSigned)
    .then(retrievedTx => console.log('Transaction', retrievedTx.id, 'successfully posted.'))

Browser usage

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>BigchainDB boilerplate</title>
        <!-- Adjust version to your needs -->
        <script src="https://unpkg.com/bigchaindb-driver@4.2.0/dist/browser/bigchaindb-driver.window.min.js"></script>

        <script>
            // BigchainDB server instance (e.g. https://example.com/api/v1/)
            const API_PATH = 'http://localhost:9984/api/v1/'

            // Create a new keypair.
            const alice = new BigchainDB.Ed25519Keypair()

            // Construct a transaction payload
            const tx = BigchainDB.Transaction.makeCreateTransaction(
                // Define the asset to store, in this example it is the current temperature
                // (in Celsius) for the city of Berlin.
                { city: 'Berlin, DE', temperature: 22, datetime: new Date().toString() },

                // Metadata contains information about the transaction itself
                // (can be `null` if not needed)
                { what: 'My first BigchainDB transaction' },

                // A transaction needs an output
                [ BigchainDB.Transaction.makeOutput(
                        BigchainDB.Transaction.makeEd25519Condition(alice.publicKey))
                ],
                alice.publicKey
            )

            // Sign the transaction with private keys
            const txSigned = BigchainDB.Transaction.signTransaction(tx, alice.privateKey)

            // Send the transaction off to BigchainDB
            let conn = new BigchainDB.Connection(API_PATH)

            conn.postTransactionCommit(txSigned)
                .then(res => {
                    const elem = document.getElementById('lastTransaction')
                    elem.href = API_PATH + 'transactions/' + txSigned.id
                    elem.innerText = txSigned.id
                    console.log('Transaction', txSigned.id, 'accepted')
                })
            // Check console for the transaction's status
        </script>
    </head>
    <body id="home">
        <h1>Hello BigchainDB</h1>
        <p>Your transaction id is: <a id="lastTransaction" target="_blank"><em>processing</em></a></p>
    </body>
</html>

BigchainDB Documentation

Speed Optimizations

This implementation plays "safe" by using JS-native (or downgradable) libraries for its crypto-related functions to keep compatibilities with the browser. If you do want some more speed, feel free to explore the following:

Development

git clone git@github.com:bigchaindb/js-bigchaindb-driver.git
cd js-bigchaindb-driver/

npm i
npm run dev

After updating source files in src/, make sure to update the API documentation. The following command will scan all source files and create the Markdown output into ./API.md:

npm run doc

Release Process

See the file named RELEASE_PROCESS.md.

Authors

Licenses

See LICENSE and LICENSE-docs.