This repository contains the chaincode and SDKs of the IoT Service Blockchain project. IoT Service Blockchain is a secure decentralized IoT service platform based-on consortium blockchain technology. The chaincode provides a management interface of the IoT devices and services on the Hyperledger Fabric blockchain. The SDKs offer application developers to join the blockchain network with their IoT devices, define services of their devices, and request services from IoT devices.
-
Chaincode
IoT Service Blockchain chaincode requires Hyperledger Fabric version 2.4 or above. The chaincode is located under
chaincode
directory. Follow Hyperledger Fabric's guide to deploy the chaincode to your Hyperledger Fabric blockchain. -
Go SDK
To install the Go SDK of IoT Service Blockchain, run:
go get github.com/nexus-lab/iot-service-blockchain
Refer to
tests/e2e/go
for usage examples of the Go SDK. -
Java SDK
To install the Java SDK of IoT Service Blockchain, you will first need to authenticate to GitHub Packages. Follow Authenticating to GitHub Packages for more information. Then, add this package as a dependency to your
pom.xml
:<dependency> <groupId>org.nexus-lab.iot-service-blockchain</groupId> <artifactId>sdk</artifactId> <version>0.0.4-SNAPSHOT</version> </dependency>
Finally, run
mvn install
to complete the installation. Also, refer totests/e2e/java
for usage examples of the Java SDK. -
JavaScript SDK
To install the JavaScript SDK of IoT Service Blockchain, you will first need to authenticate to GitHub Packages. Follow Authenticating to GitHub Packages for more information. Then, set up the
.npmrc
file following Installing a package to let your package manager search for this package on the GitHub Package repository. Finally, run the following command to install the SDK:npm install @nexus-lab/iot-service-blockchain@0.0.5
Also, refer to
tests/e2e/javascript
for usage examples of the JavaScript SDK.
- End-to-end tests: Docker & Docker Compose
- Chaincode and Go SDK: Go version 1.16 and above
- Java SDK: Java version 1.8 and above, Maven
- JavaScript SDK: Node.js version 14 and above, Yarn
-
Chaincode and Go SDK
Run unit tests using the following command:
go test -v ./...
-
Java SDK
Run unit tests using the following command:
mvn test
-
JavaScript SDK
First, install the dependencies:
yarn install
Then, run unit tests using the following command:
env TZ="America/New_York" yarn test
The tests/scripts/fabric
script provides simple commands that quickly
creates a testing Hyperledger Fabric blockchain network.
To download and start the network, run:
./tests/scripts/fabric download
./tests/scripts/fabric network up
This will download necessary files and binaries to the .fabric
and .explorer
directories.
Use the following command to install the chaincode to the testing blockchain network:
./tests/scripts/fabric chaincode deploy
Then, run end-to-end tests using the following information:
-
Go SDK
To run the end-to-end tests of Go SDK, execute:
export FABRIC_ROOT=$(pwd)/.fabric go run ./tests/e2e/go/run.go
-
Java SDK
To run the end-to-end tests of Java SDK, execute:
export FABRIC_ROOT=$(pwd)/.fabric mvn install cd tests/e2e/java mvn compile exec:java -Dexec.mainClass="com.example.e2e.Run" cd -
-
JavaScript SDK
To run the end-to-end tests of JavaScript SDK, execute:
export FABRIC_ROOT=$(pwd)/.fabric yarn build env TZ="America/New_York" node ./tests/e2e/javascript/run.js
Finally, when the testings are done, use this command to shutdown the network and clean up:
./tests/scripts/fabric network down
Please refer to CONTRIBUTING.md for the process of submitting pull requests to us.
This project is licensed under the GPL v3 License - see LICENSE for details.
If this work is helpful to you, please consider citing the following article:
@Article{s22218186,
AUTHOR = {Zhang, Ruipeng and Xu, Chen and Xie, Mengjun},
TITLE = {Secure Decentralized IoT Service Platform Using Consortium Blockchain},
JOURNAL = {Sensors},
VOLUME = {22},
YEAR = {2022},
NUMBER = {21},
ARTICLE-NUMBER = {8186},
URL = {https://www.mdpi.com/1424-8220/22/21/8186},
ISSN = {1424-8220},
DOI = {10.3390/s22218186}
}