mirror of
https://github.com/bigchaindb/js-bigchaindb-driver.git
synced 2024-11-25 19:52:02 +01:00
Finished divisible asset example
This commit is contained in:
parent
22bebc7e2f
commit
8e7c213fb9
@ -64,7 +64,7 @@ that represents a bicycle:
|
|||||||
|
|
||||||
.. code-block:: js
|
.. code-block:: js
|
||||||
|
|
||||||
assetdata = {
|
const assetdata = {
|
||||||
'bicycle': {
|
'bicycle': {
|
||||||
'serial_number': 'abcd1234',
|
'serial_number': 'abcd1234',
|
||||||
'manufacturer': 'Bicycle Inc.',
|
'manufacturer': 'Bicycle Inc.',
|
||||||
@ -86,7 +86,7 @@ For example, the bicycle will be transferred on earth which is metadata:
|
|||||||
|
|
||||||
.. code-block:: js
|
.. code-block:: js
|
||||||
|
|
||||||
metadata = {'planet': 'earth'}
|
const metadata = {'planet': 'earth'}
|
||||||
|
|
||||||
Asset Creation
|
Asset Creation
|
||||||
--------------
|
--------------
|
||||||
@ -288,7 +288,7 @@ Recap: Asset Creation & Transfer
|
|||||||
|
|
||||||
// Define the asset to store, in this example
|
// Define the asset to store, in this example
|
||||||
// we store a bicycle with its serial number and manufacturer
|
// we store a bicycle with its serial number and manufacturer
|
||||||
assetdata = {
|
const assetdata = {
|
||||||
'bicycle': {
|
'bicycle': {
|
||||||
'serial_number': 'cde',
|
'serial_number': 'cde',
|
||||||
'manufacturer': 'Bicycle Inc.',
|
'manufacturer': 'Bicycle Inc.',
|
||||||
@ -298,7 +298,7 @@ Recap: Asset Creation & Transfer
|
|||||||
// Metadata contains information about the transaction itself
|
// Metadata contains information about the transaction itself
|
||||||
// (can be `null` if not needed)
|
// (can be `null` if not needed)
|
||||||
// E.g. the bicycle is fabricated on earth
|
// E.g. the bicycle is fabricated on earth
|
||||||
metadata = {'planet': 'earth'}
|
const metadata = {'planet': 'earth'}
|
||||||
|
|
||||||
// Construct a transaction payload
|
// Construct a transaction payload
|
||||||
const txCreateAliceSimple = driver.Transaction.makeCreateTransaction(
|
const txCreateAliceSimple = driver.Transaction.makeCreateTransaction(
|
||||||
@ -360,7 +360,97 @@ Recap: Asset Creation & Transfer
|
|||||||
Divisible Assets
|
Divisible Assets
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
Yet to come!
|
All assets in BigchainDB become implicitly divisible if a transaction contains more than one of that asset (we’ll see how this happens shortly).
|
||||||
|
|
||||||
|
Let's assume we have created a token to pay each other for small transactions like a beer or some food between friends.
|
||||||
|
|
||||||
|
.. code-block:: js
|
||||||
|
|
||||||
|
const token = {
|
||||||
|
'value': '1 euro'
|
||||||
|
}
|
||||||
|
|
||||||
|
Let's create the asset. Note that we give an extra parameter to the ``makeOutput()`` function.
|
||||||
|
We give it the parameter ``'4'`` to indicate that we want to create 4 tokens.
|
||||||
|
**Pay attention to give the function a String instead of a plain Number.**
|
||||||
|
|
||||||
|
.. code-block:: js
|
||||||
|
|
||||||
|
const txCreateAliceDivisible = driver.Transaction.makeCreateTransaction(
|
||||||
|
token,
|
||||||
|
{metaDataMessage: 'I am specific to this create transaction'},
|
||||||
|
[driver.Transaction.makeOutput(driver.Transaction.makeEd25519Condition(alice.publicKey), '4')],
|
||||||
|
alice.publicKey
|
||||||
|
)
|
||||||
|
|
||||||
|
Alice goes dining at Bob and Carly. She decides to give a small fee to Bob and Carly.
|
||||||
|
Alice decides to issue 4 tokens as a payment for her food: one to Bob, two to Carly and one to herself.
|
||||||
|
Why one to herself? If you decide to fulfill an output, you have to spend all tokens.
|
||||||
|
So if you want to keep one token for yourself, you have to transfer it to yourself.
|
||||||
|
As you can see, we fulfill the first output of the create transaction (it's 0 because we start counting from 0).
|
||||||
|
This gives us 4 tokens to transfer.
|
||||||
|
|
||||||
|
.. code-block:: js
|
||||||
|
|
||||||
|
const txTransferDivisible = driver.Transaction.makeTransferTransaction(
|
||||||
|
txCreateAliceDivisibleSigned,
|
||||||
|
{
|
||||||
|
metaDataMessage: 'I am specific to this transfer transaction'
|
||||||
|
},
|
||||||
|
[
|
||||||
|
driver.Transaction.makeOutput(driver.Transaction.makeEd25519Condition(carly.publicKey), '2'),
|
||||||
|
driver.Transaction.makeOutput(driver.Transaction.makeEd25519Condition(bob.publicKey), '1'),
|
||||||
|
driver.Transaction.makeOutput(driver.Transaction.makeEd25519Condition(alice.publicKey), '1')
|
||||||
|
], 0);
|
||||||
|
|
||||||
|
To make the use of the last parameter of ``makeTransferTransaction()`` function more clear, we will do another transfer.
|
||||||
|
We will fulfill the first and second output of the create transaction (0, 1) because Carly and Bob decide to redistribute some money.
|
||||||
|
|
||||||
|
* Output 0 represents 2 tokens for Carly
|
||||||
|
* Output 1 represents 1 token for Bob
|
||||||
|
|
||||||
|
This gives us 3 tokens to redistribute. I want to give 1 token to Carly and 2 tokens Alice.
|
||||||
|
|
||||||
|
.. code-block:: js
|
||||||
|
|
||||||
|
const txTransferDivisibleInputs = driver.Transaction.makeTransferTransaction(
|
||||||
|
txTransferDivisibleSigned,
|
||||||
|
{
|
||||||
|
metaDataMessage: 'I am specific to this transfer transaction'
|
||||||
|
},
|
||||||
|
[
|
||||||
|
driver.Transaction.makeOutput(driver.Transaction.makeEd25519Condition(carly.publicKey), '1'),
|
||||||
|
driver.Transaction.makeOutput(driver.Transaction.makeEd25519Condition(alice.publicKey), '2')
|
||||||
|
], 0, 1)
|
||||||
|
|
||||||
|
Because we want to fulfill two outputs (Carly and Bob), we have to sign the transfer transaction in the same order:
|
||||||
|
|
||||||
|
.. code-block:: js
|
||||||
|
|
||||||
|
const txTransferDivisibleInputsSigned = driver.Transaction.signTransaction(
|
||||||
|
txTransferDivisibleInputs,
|
||||||
|
carly.privateKey, bob.privateKey)
|
||||||
|
|
||||||
|
Here is a better overview of the flow of the tokens.
|
||||||
|
|
||||||
|
+-----------+------------+-----------------+
|
||||||
|
| **Owner** | **Amount** | **Transaction** |
|
||||||
|
+===========+============+=================+
|
||||||
|
| ``Alice`` | 4 | ``CREATE`` |
|
||||||
|
+-----------+------------+-----------------+
|
||||||
|
| ``Alice`` | 1 | ``TRANSFER 1`` |
|
||||||
|
+-----------+------------+-----------------+
|
||||||
|
| ``Bob`` | 1 | ``TRANSFER 1`` |
|
||||||
|
+-----------+------------+-----------------+
|
||||||
|
| ``Carly`` | 2 | ``TRANSFER 1`` |
|
||||||
|
+-----------+------------+-----------------+
|
||||||
|
| ``Alice`` | 3 | ``TRANSFER 2`` |
|
||||||
|
+-----------+------------+-----------------+
|
||||||
|
| ``Bob`` | 0 | ``TRANSFER 2`` |
|
||||||
|
+-----------+------------+-----------------+
|
||||||
|
| ``Carly`` | 1 | ``TRANSFER 2`` |
|
||||||
|
+-----------+------------+-----------------+
|
||||||
|
|
||||||
|
|
||||||
.. TODO:
|
.. TODO:
|
||||||
.. - Add lexer: https://stackoverflow.com/questions/4259105/which-sphinx-code-block-language-to-use-for-json
|
.. - Add lexer: https://stackoverflow.com/questions/4259105/which-sphinx-code-block-language-to-use-for-json
|
||||||
|
Loading…
Reference in New Issue
Block a user