Name: fabric-sdk-node
Owner: Hyperledger
Description: Read-only mirror of https://gerrit.hyperledger.org/r/#/admin/projects/fabric-sdk-node
Created: 2016-09-12 16:48:26.0
Updated: 2018-05-23 17:21:57.0
Pushed: 2018-05-24 11:53:18.0
Homepage: https://hyperledger.org/
Size: 3730
Language: JavaScript
GitHub Committers
User | Most Recent Commit | # Commits |
---|
Other Committers
User | Most Recent Commit | # Commits |
---|
|Node 6 Build Status|Node 8 Build Status| |—|—| |||
The Hyperledger Fabric Client SDK makes it easy to use APIs to interact with a Hyperledger Fabric blockchain.
As an application developer, to learn about how to install and use the Node.js SDK, please visit the SDK documentation.
This project publishes two separate npm packages:
fabric-client
- main client for the Hyperledger Fabric. Applications can use this package to install and instantiate chaincodes, submit transactions and make queries against a Hyperledger Fabric-based blockchain network.fabric-ca-client
- client for the optional component in Hyperledger Fabric, fabric-ca. The fabric-ca component allows applications to enroll Peers and application users to establish trusted identities on the blockchain network. It also provides support for pseudonymous transaction submissions with Transaction Certificates. If the target blockchain network is configured with standard Certificate Authorities for trust anchors, the application does not need to use this package.The following section targets a current or future contributor to this project itself.
To build and test, the following pre-requisites must be installed first:
npm install -g gulp
)npm test
, see below)Clone the project and launch the following commands to install the dependencies and perform various tasks.
In the project root folder:
npm install
to install dependenciesgulp watch
to set up watch that updates fabric-ca-client's shared dependencies from fabric-client/lib and updates installed fabric-client and fabric-ca-client modules in node_modules. This command does not return, so you should keep it running in a separate command window as you work on the code and test in another command window. Note that you do NOT need to run this unless you plan to make changes in the fabric-client and fabric-ca-client packagesgulp doc
to generate API docs if you want to review the doc contentnpm test
or gulp test-headless
to run the headless tests that do not require any additional set upThe following tests require setting up a local blockchain network as the target. Because v1.0 is still in active development, you still need to build the necessary Docker images needed to run the network. Follow the steps below to set it up.
You can build the docker images in your native host (Mac, Ubuntu, Windows, etc.):
If docker is installed and it?s not ?Docker for Mac/Windows?, uninstall and follow Docker?s clean up instructions to uninstall completely.
Install ?Docker for Mac? or Docker for Windows
, or Docker on linux
Only for Mac, you need to install a gnu-compatible version of the tar
utility:
Install Brew: http://brew.sh
run brew install gnu-tar ?-with-default-names
in order to swap out Mac's default tar command for a gnu-compliant one needed by chaincode execution on the peers
build fabric-ca docker image (new membership service)
cd `$GOPATH/src/github.com/hyperledger/fabric-ca
run make docker
. For more build instructions see fabric-ca README
build fabric peer and orderer docker images and other ancillary images
cd $GOPATH/src/github.com/hyperledger/fabric
run make docker
to build the docker images (you may need to run make docker-clean
first if you've built before)
Now you are ready to run the tests:
Clear out your previous key value stores that may have cached user enrollment certificates (rm -rf /tmp/hfc-*
, rm -rf ~/.hfc-key-store
)
run gulp test
to execute the entire test suite (800+ test cases), or you can run them individually
Test happy path from end to end, run node test/integration/e2e.js
Test end to end one step at a time, make sure to follow this sequence:
node test/integration/e2e/create-channel.js
node test/integration/e2e/join-channel.js
node test/integration/e2e/install-chaincode.js
node test/integration/e2e/instantiate-chaincode.js
node test/integration/e2e/invoke-transaction.js
node test/integration/e2e/query.js
Test user management by member services with the following tests that exercise the fabric-ca-client package with a KeyValueStore implementations for a file-based KeyValueStore as well as a CouchDB KeyValueStore. To successfully run this test, you must first set up a CouchDB database instance on your local machine. Please see the instructions below.
test/integration/fabric-ca-services-tests.js
test/integration/couchdb-fabricca-tests.js
test/integration/cloudant-fabricca-tests.js
To re-run node test/integration/e2e.js
or fabric-ca-services-tests.js
stop the network (ctrl-c), clean up the docker instances (docker rm $(docker ps -aq)
) and restart the network with docker-compose up
as described above.
The SDK has experimental support for PKCS#11 interface in order to allow applications to make use of HSM devices for key management. Unit tests for this feature are skipped by default. To run these testss:
tar -xvf softhsm-2.2.0.tar.gz
cd softhsm-2.2.0
./configure --disable-gost
(would require additional libraries, turn it off unless you need gost algorithm support for the Russian market)make
sudo make install
softhsm2-util --init-token --slot 0 --label "My token 1"
, you will be prompted two PINs: SO (Security Officer) PIN that can be used to re-initialize the token, and user PIN to be used by applications to access the token for generating and retrieving keysThe unit test assumes slot '0' and user PIN 98765432
. If your configuration is different, use these environment variables to pass in the values:
The following check-list is for code contributors to make sure their changesets are compliant to the coding standards and avoid time wasted in rejected changesets:
Check the coding styles, run the following command and make sure no ESLint violations are present:
gulp
Run the full unit test bucket and make sure 100% are passing. Because v1.0 is still in active development, all tests may not pass. You can run each individually to isolate the failure(s):
gulp test
The gulp test command above also generates code coverage reports. Your new code should be accompanied with unit tests and provide 80% line coverage or higher.
For a high-level design specificiation for Fabric SDKs of all languages, visit this google doc (Work-In-Progress).
fabric-client and fabric-ca-client are written in CommonJS modules and take advantage of ECMAScript 2015 class syntax.
HFC defines the following abstract classes for application developers to supply extensions or alternative implementations. For each abstract class, a built-in implementation is included with the ability to load alternative implementations via designated environment variables:
To replace FileKeyValueStore with a different implementation, such as one that saves data to a database, specify “KEY_VALUE_STORE” and provide the full require() path to an alternative implementation of the api.KeyValueStore abstract class.
The cryptography suite used by the default implementation uses ECDSA for asymmetric keys cryptography, AES for encryption and SHA2/3 for secure hashes. A different suite can be plugged in with “CRYPTO_SUITE” environment variable specifying full require() path to the alternative implementation of the api.CrytoSuite abstract class.
If the user application uses an alternative membership service than the one provided by the component fabric-ca
, the client code will likely need to use an alternative client to fabric-ca-client
to interact with that membership service.
This work is licensed under a Creative Commons Attribution 4.0 International License.
s