Git Product home page Git Product logo

sawtooth-supply-chain's Introduction

Hyperledger Sawtooth

Sawtooth Supply Chain

This is a distributed application to help you trace the provenance and other contextual information of any asset. It can be used as-is or customized for different use cases. This distributed application runs on top of Hyperledger Sawtooth, an enterprise blockchain. To learn more about Hyperledger Sawtooth please see its sawtooth-core repo or its published docs.

Contents

Components

Running alongside the core components from Hyperledger Sawtooth, Supply Chain includes a number of elements customizing the blockchain and user interaction with it:

  • a transaction processor which handles Supply Chain transaction logic
  • a server which provides an HTTP/JSON API, and syncs blockchain state to a local database
  • the AssetTrack example client for tracking generic assets
  • the FishNet example client for tracking fish from catch to table
  • a shell container with the dependencies to run any commands and scripts

Usage

This project utilizes Docker to simplify dependencies and deployment. After cloning this repo, follow the instructions specific to your OS to install and run whatever components are required to use docker and docker-compose from your command line. This is only dependency required to run Supply Chain components.

Start Up

Once Docker is installed and you've cloned this repo, navigate to the root project directory and run:

docker-compose up

This will take awhile the first time it runs, but when complete will be running all required components in separate containers. Many of the components will be available through HTTP endpoints, including:

In bash you can shutdown these components with the key combination: ctrl-C. You can shutdown and remove the containers (destroying their data), with the command:

docker-compose down

Running Scripts in the Shell

Running docker-compose up, will automatically run all scripts necessary to use all Supply Chain components. However if you want to run any additional scripts, such as scripts to automatically update sample blockchain data, a shell container is provided with all necessary dependencies installed. To enter the shell, simply open a terminal window and run:

docker exec -it supply-shell bash

Once inside the shell, you might try running the one of the update scripts to see live updates populate in an example web app. First navigate to the server directory:

cd server/

Then run one of the two provided npm scripts:

npm run update-sample-assets
npm run update-sample-fish

You can customize how many updates are submitted per minute with the RATE environment variable (default 6), and use LIMIT to stop the updates after a certain number are submitted (default 25):

RATE=3 LIMIT=10 npm run update-sample-assets

If you just want to exit the shell, you can simply run:

exit

Configuring API Keys and Secrets

While the Server runs out of the box with sensible defaults, there are a number of secrets and API keys which will not be secure unless set explicitly. While this is fine for demo purposes, any actual deployment set the following properties:

  • JWT_SECRET: can be any random string
  • PRIVATE_KEY: must be 64 random hexadecimal characters
  • MAPS_API_KEY: provided by Google Maps

These properties can be set one of two ways, through an environment variable, or (preferably) by creating a file named config.json file in the server/ directory. A file named config.json.example is provided which should provide a template to follow.

Development

Restarting Components

The default Docker containers use the volumes command to link directly to the source code on your host machine. As a result any changes you make will immediately be reflected in Supply Chain components without having to rebuild them. However, typically you will have to restart a component before it can take advantage of any changes. Rather than restarting every container, you can restart a single component from separate terminal using the container name. For example:

docker restart supply-server

The available container names include:

  • supply-shell
  • supply-processor
  • supply-server
  • supply-asset-client
  • supply-fish-client
  • supply-rethink
  • supply-validator
  • supply-settings-tp
  • supply-rest-api

Manually Building Generated Files

Files in the protos/ directory are used to generate classes for other components. This is done automatically on up, but if you make changes to these files and wish to rebuild the generated files immediately, you can do so from within the Supply Chain Shell:

docker exec -it supply-shell bash

Once in the shell, you can generate the necessary Python classes simply by running:

protogen

For the example clients, in addition to rebuilding them on Protobuf changes, any changes to their source code will require their static files be rebuilt. However, their containers do not typically need to be restarted in order to reflect changes, just rebuild the static files and refresh your browser (the browser cache may have to be emptied):

cd asset_client/
npm run build
cd fish_client/
npm run build

Documentation

The latest documentation for Sawtooth Supply Chain is available within this repo in the docs subdirectory.

License

Hyperledger Sawtooth software is licensed under the Apache License Version 2.0 software license.

Hyperledger Sawtooth Supply Chain documentation in the docs subdirectory is licensed under a Creative Commons Attribution 4.0 International License. You may obtain a copy of the license at: http://creativecommons.org/licenses/by/4.0/.

Open Source Award Badge

sawtooth-supply-chain's People

Contributors

abdelkrim avatar agunde406 avatar annechenette avatar boydjohnson avatar christo4ferris avatar cianx avatar danxmack avatar dcmiddle avatar delventhalz avatar dplumb94 avatar feihujiang avatar ghadishayban avatar haridhakshini avatar ineffectualproperty avatar jabyrd3 avatar jjason avatar jsmitchell avatar mfford avatar nconde avatar nick-drozd avatar ojalatodd avatar pcasaretto avatar peterschwarz avatar pjholmes avatar rberg2 avatar rbuysse avatar ryanlassigbanks avatar tombarnes avatar trbs avatar vaporos avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.