Get unlimited public & private packages + package-based permissions with npm Pro.Get started »

This package has been deprecated

Author message:

Hyperledger Composer has been deprecated. Please see the README for more details: https://github.com/hyperledger/composer/blob/master/README.md

vehicle-manufacture-network

0.2.5 • Public • Published

Vehicle Manufacture Network

This network tracks the manufacture of vehicles from an initial order request through to their completion by the manufacturer. A regulator is able to provide oversight throughout this whole process.

Models within this business network

Participants

Person Manufacturer Regulator

Assets

Order Vehicle

Transactions

PlaceOrder UpdateOrderStatus SetupDemo

Events

PlaceOrderEvent UpdateOrderStatusEvent

Example use of this business network

A Person uses a manufacturer's application to build their desired car and order it. The application submits a PlaceOrder transaction which creates a new Order asset containing the details of the vehicle the Person wishes to have made for them. The Manufacturer begins work on the car and as it proceeds through stages of production the Manufacturer submits UpdateOrderStatus transactions to mark the change in status for the Order e.g. updating the status from PLACED to SCHEDULED_FOR_MANUFACTURE. Once the Manufacturer has completed production for the Order they register the car by submitting an UpdateOrderStatus transaction with the status VIN_ASSIGNED (also providing the VIN to register against) and a Vehicle asset is formally added to the registry using the details specified in the Order. Once the car is registered then the Manufacturer submits an UpdateOrderStatus transaction with a status of OWNER_ASSIGNED at which point the owner field of the Vehicle is set to match the orderer field of the Order. The regulator would perform oversight over this whole process.

Testing this network within playground

Navigate to the Test tab and then submit a SetupDemo transaction:

{
  "$class": "org.acme.vehicle_network.SetupDemo"
}

This will generate three Manufacturer participants, fourteen Person participants, a single Regulator participant and thirteen Vehicle assets.

Next order your car (an orange Arium Gamora) by submitting a PlaceOrder transaction:

{
  "$class": "org.acme.vehicle_network.PlaceOrder",
  "orderId": "1234",
  "vehicleDetails": {
    "$class": "org.acme.vehicle_network.VehicleDetails",
    "make": "resource:org.acme.vehicle_network.Manufacturer#Arium",
    "modelType": "Gamora",
    "colour": "Sunburst Orange"
  },
  "options": {
    "trim": "executive",
    "interior": "red rum",
    "extras": ["tinted windows", "extended warranty"]
  },
  "orderer": "resource:org.acme.vehicle_network.Person#Paul"
}

This PlaceOrder transaction generates a new Order asset in the registry and emits a PlaceOrderEvent event.

Now simulate the order being accepted by the manufacturer by submitting an UpdateOrderStatus transaction:

{
  "$class": "org.acme.vehicle_network.UpdateOrderStatus",
  "orderStatus": "SCHEDULED_FOR_MANUFACTURE",
  "order": "resource:org.acme.vehicle_network.Order#1234"
}

This UpdateOrderStatus transaction updates the orderStatus of the Order with orderId 1234 in the asset registry and emits an UpdateOrderStatusEvent event.

Simulate the manufacturer registering the vehicle with the regulator by submitting an UpdateOrderStatus transaction:

{
  "$class": "org.acme.vehicle_network.UpdateOrderStatus",
  "orderStatus": "VIN_ASSIGNED",
  "order": "resource:org.acme.vehicle_network.Order#1234",
  "vin": "abc123"
}

This UpdateOrderStatus transaction updates the orderStatus of the Order with orderId 1234 in the asset registry, create a new Vehicle based of that Order in the asset registry and emits an UpdateOrderStatusEvent event. At this stage as the vehicle does not have an owner assigned to it, its status is declared as OFF_THE_ROAD.

Next assign the owner of the vehicle using an UpdateOrderStatus transaction:

{
  "$class": "org.acme.vehicle_network.UpdateOrderStatus",
  "orderStatus": "OWNER_ASSIGNED",
  "order": "resource:org.acme.vehicle_network.Order#1234",
  "vin": 'abc123'
}

This UpdateOrderStatus transaction updates the orderStatus of the Order with orderId 1234 in the asset registry, update the Vehicle asset with VIN abc123 to have an owner of Paul (who we intially marked as the orderer in the PlaceOrder transaction) and status of ACTIVE and also emits an UpdateOrderStatusEvent event.

Finally complete the ordering process by marking the order as DELIVERED through submitting another UpdateOrderStatus transaction:

{
  "$class": "org.acme.vehicle_network.UpdateOrderStatus",
  "orderStatus": "DELIVERED",
  "order": "resource:org.acme.vehicle_network.Order#1234"
}

This UpdateOrderStatus transaction updates the orderStatus of the Order with orderId 1234 in the asset registry and emits an UpdateOrderStatusEvent event.

This Business Network definition has been used to create demo applications that simulate the scenario outlined above. You can find more detail on these at https://github.com/hyperledger/composer-sample-applications/tree/master/packages/vehicle-manufacture

Permissions in this business network for modelled participants

Within this network permissions are outlines for the participants outlining what they can and can't do. The rules in the permissions.acl file explicitly ALLOW participants to perform actions. Actions not written for a participant in that file are blocked.

Regulator

RegulatorAdminUser - Gives the regulator permission to perform ALL actions on ALL resources

Manufacturer

ManufacturerUpdateOrder - Allows a manufacturer to UPDATE an Order asset's data only using an UpdateOrderStatus transaction. The manufacturer must also be specified as the vehicleDetails.make in the Order asset.

ManufacturerUpdateOrderStatus - Allows a manufacturer to CREATE and READ UpdateOrderStatus transactions that refer to an order that they are specified as the vehicleDetails.make in.

ManufacturerReadOrder - Allows a manufacturer to READ an Order asset that they are specified as the vehicleDetails.make in.

ManufacturerCreateVehicle - Allows a manufacturer to CREATE a vehicle asset only using a UpdateOrderStatus transaction. The transaction must have an orderStatus of VIN_ASSIGNED and the Order asset have the manufacturer specified as the vehicleDetails.make.

ManufacturerReadVehicle - Allows a manufacturer to READ a Vehicle asset that they are specified as the vehicleDetails.make in.

Person

PersonMakeOrder - Gives the person permission to CREATE an Order asset only using a PlaceOrder transaction. The person must also be specified as the orderer in the Order asset.

PersonPlaceOrder - Gives the person permission to CREATE and READ PlaceOrder transactions that refer to an order that they are specified as orderer in.

PersonReadOrder - Gives the person permission to READ an Order asset that they are specified as the orderer in.

License

Hyperledger Project source code files are made available under the Apache License, Version 2.0 (Apache-2.0), located in the LICENSE file. Hyperledger Project documentation files are made available under the Creative Commons Attribution 4.0 International License (CC-BY-4.0), available at http://creativecommons.org/licenses/by/4.0/.

Install

npm i vehicle-manufacture-network

DownloadsWeekly Downloads

12

Version

0.2.5

License

Apache 2.0

Unpacked Size

80.1 kB

Total Files

15

Last publish

Collaborators

  • avatar