IoT Service Blockchain
Overview
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.
Installation & Usage
-
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 to tests/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.
Testing
Requirements
- 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
Run Unit Tests
-
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
Run End-to-end Tests
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
Contributing
Please refer to CONTRIBUTING.md for the process of submitting pull requests to
us.
License
This project is licensed under the GPL v3 License - see LICENSE for details.
Reference
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}
}