mirror of
https://github.com/bigchaindb/js-bigchaindb-driver.git
synced 2024-12-27 23:27:50 +01:00
Basic usage examples added, not completed
This commit is contained in:
parent
6f6c21dacf
commit
dfaf97e5ce
0
.eslintignore
Normal file → Executable file
0
.eslintignore
Normal file → Executable file
0
.eslintrc.json
Normal file → Executable file
0
.eslintrc.json
Normal file → Executable file
0
.gitignore
vendored
Normal file → Executable file
0
.gitignore
vendored
Normal file → Executable file
0
.npmignore
Normal file → Executable file
0
.npmignore
Normal file → Executable file
0
.travis.yml
Normal file → Executable file
0
.travis.yml
Normal file → Executable file
0
CODE_OF_CONDUCT.md
Normal file → Executable file
0
CODE_OF_CONDUCT.md
Normal file → Executable file
0
CONTRIBUTING.rst
Normal file → Executable file
0
CONTRIBUTING.rst
Normal file → Executable file
0
docs/Makefile
Normal file → Executable file
0
docs/Makefile
Normal file → Executable file
0
docs/README.md
Normal file → Executable file
0
docs/README.md
Normal file → Executable file
0
docs/make.bat
Normal file → Executable file
0
docs/make.bat
Normal file → Executable file
0
docs/requirements.txt
Normal file → Executable file
0
docs/requirements.txt
Normal file → Executable file
0
docs/source/.conf.py.swp
Normal file → Executable file
0
docs/source/.conf.py.swp
Normal file → Executable file
0
docs/source/conf.py
Normal file → Executable file
0
docs/source/conf.py
Normal file → Executable file
1
docs/source/index.rst
Normal file → Executable file
1
docs/source/index.rst
Normal file → Executable file
@ -7,6 +7,7 @@ BigchainDB Javascript Driver Documentation
|
||||
← Back to All BigchainDB Docs <https://bigchaindb.readthedocs.io/en/latest/index.html>
|
||||
readme
|
||||
quickstart
|
||||
usage
|
||||
|
||||
|
||||
Another header
|
||||
|
11
docs/source/quickstart.rst
Normal file → Executable file
11
docs/source/quickstart.rst
Normal file → Executable file
@ -1,4 +1,9 @@
|
||||
Quickstart
|
||||
==========
|
||||
=========================
|
||||
Quickstart / Installation
|
||||
=========================
|
||||
|
||||
Quickstart comes here
|
||||
Installation with package manager npm:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ npm install bigchaindb-driver
|
||||
|
0
docs/source/readme.rst
Normal file → Executable file
0
docs/source/readme.rst
Normal file → Executable file
208
docs/source/usage.rst
Executable file
208
docs/source/usage.rst
Executable file
@ -0,0 +1,208 @@
|
||||
====================
|
||||
Basic Usage Examples
|
||||
====================
|
||||
|
||||
For the examples on this page, we assume you've :doc:`installed the bigchaindb_driver JavaScript package <quickstart>`,
|
||||
and you have determined the BigchainDB Root URL (issue: move this to general docs)
|
||||
of the node or cluster you want to connect to.
|
||||
|
||||
This example guides you through creating and transferring an asset.
|
||||
We walk through the code explaining its use, some pieces are left out
|
||||
because they have no real use (e.g. defenition of global variable)
|
||||
*Full working code* can be found at the bottom of this document.
|
||||
|
||||
Getting Started
|
||||
---------------
|
||||
We begin by creating an object of BigchainDB driver:
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
// ES6 Browser
|
||||
import * as driver from 'js-bigchaindb-driver';
|
||||
// ES<<6 Browser
|
||||
let driver = require('js-bigchaindb-driver');
|
||||
// ES<<6 CommonJS / node
|
||||
let driver = require('js-bigchaindb-driver/dist/node');
|
||||
|
||||
Next, we define a constant containing the API path.
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
// http(s)://<bigchaindb-API-url>/ (e.g. http://localhost:9984/api/v1/)
|
||||
const API_PATH = 'http://localhost:9984/api/v1/';
|
||||
|
||||
Cryptographic Identities Generation
|
||||
-----------------------------------
|
||||
Alice and Bob are represented by public/private key pairs. The private key is
|
||||
used to sign transactions, meanwhile the public key is used to verify that a
|
||||
signed transaction was indeed signed by the one who claims to be the signee.
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
const alice = new driver.Ed25519Keypair();
|
||||
const bob = new driver.Ed25519Keypair();
|
||||
|
||||
Digital Asset Definition
|
||||
------------------------
|
||||
|
||||
As an example, let’s consider the creation and transfer of a digital asset
|
||||
that represents a bicycle:
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
bicycle = {
|
||||
'data': {
|
||||
'bicycle': {
|
||||
'serial_number': 'abcd1234',
|
||||
'manufacturer': 'bkfab',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
We'll suppose that the bike belongs to Alice, and that it eventually will be
|
||||
transferred to Bob.
|
||||
|
||||
In general, you are free to define any JSON object you which to store for the
|
||||
``'data'`` property
|
||||
|
||||
Metadata Definition (*optional*)
|
||||
--------------------------------
|
||||
|
||||
You can `optionally` add metadata to a transaction. Any JSON object is accepted.
|
||||
|
||||
For example, the bicycle will be transferred on earth which is metadata:
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
metadata = {'planet': 'earth'}
|
||||
|
||||
Asset Creation
|
||||
--------------
|
||||
|
||||
We're now ready to create the digital asset. First, let's make a 'CREATE'
|
||||
transaction:
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
const txCreateAliceSimple = driver.Transaction.makeCreateTransaction(
|
||||
bicycle,
|
||||
metadata,
|
||||
[ driver.Transaction.makeOutput(
|
||||
driver.Transaction.makeEd25519Condition(alice.publicKey)
|
||||
)],
|
||||
alice.publicKey
|
||||
);
|
||||
|
||||
The transaction now needs to be fulfilled by signing it with Alice’s
|
||||
private key:
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
const txCreateAliceSimpleSigned = driver.Transaction.signTransaction(txCreateAliceSimple, alice.privateKey);
|
||||
|
||||
And sent over to a BigchainDB node:
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
driver.Connection.postTransaction(txCreateAliceSimpleSigned, API_PATH)
|
||||
|
||||
Notice the transaction ``id``:
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
txid = txCreateAliceSimpleSigned.id
|
||||
|
||||
To check the status of the transaction:
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
driver.Connection.getStatus(txCreateAliceSimpleSigned.id, API_PATH)
|
||||
|
||||
It is also possible to check the status every 0.5 seconds
|
||||
with use of the transaction ``id``:
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
return driver.Connection.pollStatusAndFetchTransaction(txCreateAliceSimpleSigned.id, API_PATH)
|
||||
|
||||
.. note:: It may take a small amount of time before a BigchainDB cluster
|
||||
confirms a transaction as being valid.
|
||||
|
||||
Asset Transfer
|
||||
--------------
|
||||
|
||||
Imagine some time goes by, during which Alice is happy with her bicycle, and
|
||||
one day, she meets Bob, who is interested in acquiring her bicycle. The timing
|
||||
is good for Alice as she had been wanting to get a new bicycle.
|
||||
|
||||
To transfer the bicycle (asset) to Bob, Alice must consume the transaction in
|
||||
which the Bicycle asset was created.
|
||||
|
||||
Alice could retrieve the transaction:
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
driver.Connection.getTransaction(txCreateAliceSimpleSigned.id)
|
||||
|
||||
First, let's prepare the transaction to be transferred.
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
const txTransferBob = driver.Transaction.makeTransferTransaction(
|
||||
txCreateAliceSimpleSigned,
|
||||
{price: '100 euro'},
|
||||
[ driver.Transaction.makeOutput(
|
||||
driver.Transaction.makeEd25519Condition(bob.publicKey)
|
||||
)],
|
||||
0
|
||||
);
|
||||
|
||||
The function ``makeTransferTransaction()`` needs following parameters:
|
||||
|
||||
- Unspent transaction: Previous transaction you have control over (i.e. can fulfill its Output Condition)
|
||||
- Metadata for transaction (e.g. price of sold bike)
|
||||
- Array of output objects to add to the transaction: Think of these as the recipients of the asset after the transaction. For `TRANSFER` transactions, this should usually just be a list of outputs wrapping Ed25519 conditions generated from the public keys of the recipients.
|
||||
- Indices of the outputs in `unspent transaction` that this transaction fulfills.
|
||||
|
||||
Fulfill transaction by signing it with Alice's private key.
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
txTransferBobSigned = driver.Transaction.signTransaction(txTransferBob, alice.privateKey);
|
||||
|
||||
And sent over to a BigchainDB node:
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
return driver.Connection.postTransaction(txTransferBobSigned, API_PATH)
|
||||
|
||||
Bob is the new owner:
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
|
||||
|
||||
Alice is the former owner:
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
code
|
||||
|
||||
|
||||
|
||||
|
||||
Recap: Asset Creation & Transfer
|
||||
--------------------------------
|
||||
|
||||
.. code-block:: js
|
||||
|
||||
|
||||
|
||||
Other examples
|
||||
--------------
|
||||
|
||||
|
||||
|
||||
|
||||
TODO:
|
||||
- Add lexer: https://stackoverflow.com/questions/4259105/which-sphinx-code-block-language-to-use-for-json
|
0
docs/upgrade-guides/0.3.0.md
Normal file → Executable file
0
docs/upgrade-guides/0.3.0.md
Normal file → Executable file
0
media/repo-banner.sketch
Normal file → Executable file
0
media/repo-banner.sketch
Normal file → Executable file
0
media/repo-banner@2x.png
Normal file → Executable file
0
media/repo-banner@2x.png
Normal file → Executable file
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
0
package.json
Normal file → Executable file
0
package.json
Normal file → Executable file
0
src/Ed25519Keypair.js
Normal file → Executable file
0
src/Ed25519Keypair.js
Normal file → Executable file
0
src/baseRequest.js
Normal file → Executable file
0
src/baseRequest.js
Normal file → Executable file
0
src/connection.js
Normal file → Executable file
0
src/connection.js
Normal file → Executable file
0
src/format_text.js
Normal file → Executable file
0
src/format_text.js
Normal file → Executable file
0
src/index.js
Normal file → Executable file
0
src/index.js
Normal file → Executable file
0
src/request.js
Normal file → Executable file
0
src/request.js
Normal file → Executable file
0
src/sanitize.js
Normal file → Executable file
0
src/sanitize.js
Normal file → Executable file
0
src/sha256Hash.js
Normal file → Executable file
0
src/sha256Hash.js
Normal file → Executable file
0
src/stringify_as_query_param.js
Normal file → Executable file
0
src/stringify_as_query_param.js
Normal file → Executable file
0
src/transaction/hashTransaction.js
Normal file → Executable file
0
src/transaction/hashTransaction.js
Normal file → Executable file
0
src/transaction/index.js
Normal file → Executable file
0
src/transaction/index.js
Normal file → Executable file
0
src/transaction/makeCreateTransaction.js
Normal file → Executable file
0
src/transaction/makeCreateTransaction.js
Normal file → Executable file
0
src/transaction/makeEd25519Condition.js
Normal file → Executable file
0
src/transaction/makeEd25519Condition.js
Normal file → Executable file
0
src/transaction/makeInputTemplate.js
Normal file → Executable file
0
src/transaction/makeInputTemplate.js
Normal file → Executable file
0
src/transaction/makeOutput.js
Normal file → Executable file
0
src/transaction/makeOutput.js
Normal file → Executable file
0
src/transaction/makeSha256Condition.js
Normal file → Executable file
0
src/transaction/makeSha256Condition.js
Normal file → Executable file
0
src/transaction/makeThresholdCondition.js
Normal file → Executable file
0
src/transaction/makeThresholdCondition.js
Normal file → Executable file
0
src/transaction/makeTransaction.js
Normal file → Executable file
0
src/transaction/makeTransaction.js
Normal file → Executable file
0
src/transaction/makeTransferTransaction.js
Normal file → Executable file
0
src/transaction/makeTransferTransaction.js
Normal file → Executable file
0
src/transaction/serializeTransactionIntoCanonicalString.js
Normal file → Executable file
0
src/transaction/serializeTransactionIntoCanonicalString.js
Normal file → Executable file
0
src/transaction/signTransaction.js
Normal file → Executable file
0
src/transaction/signTransaction.js
Normal file → Executable file
0
src/transaction/utils/ccJsonLoad.js
Normal file → Executable file
0
src/transaction/utils/ccJsonLoad.js
Normal file → Executable file
0
src/transaction/utils/ccJsonify.js
Normal file → Executable file
0
src/transaction/utils/ccJsonify.js
Normal file → Executable file
0
test/connection/test_connection.js
Normal file → Executable file
0
test/connection/test_connection.js
Normal file → Executable file
0
test/constants.js
Normal file → Executable file
0
test/constants.js
Normal file → Executable file
0
test/integration/test_integration.js
Normal file → Executable file
0
test/integration/test_integration.js
Normal file → Executable file
0
test/transaction/test_cryptoconditions.js
Normal file → Executable file
0
test/transaction/test_cryptoconditions.js
Normal file → Executable file
0
test/transaction/test_transaction.js
Normal file → Executable file
0
test/transaction/test_transaction.js
Normal file → Executable file
0
webpack.config.js
Normal file → Executable file
0
webpack.config.js
Normal file → Executable file
Loading…
Reference in New Issue
Block a user