mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-17 15:35:09 +00:00
Node.js CC: As a result of using the new protobufjs library, certain external APIs have changed in the Node.js chaincode. The samples need to be updated to use these new APIs. Java CC: As a result of moving to Java 11, we hit this issue: https://github.com/gradle/gradle/issues/8286 The sample needs to be updated to specify the absolute path to checkstyle's suppression.xml. Signed-off-by: Simon Stone <sstone1@uk.ibm.com> Change-Id: I4db886b3feff46d165e05a7eda624230b65f9cbe
143 lines
4.1 KiB
JavaScript
143 lines
4.1 KiB
JavaScript
/*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
const { Contract } = require('fabric-contract-api');
|
|
|
|
class FabCar extends Contract {
|
|
|
|
async initLedger(ctx) {
|
|
console.info('============= START : Initialize Ledger ===========');
|
|
const cars = [
|
|
{
|
|
color: 'blue',
|
|
make: 'Toyota',
|
|
model: 'Prius',
|
|
owner: 'Tomoko',
|
|
},
|
|
{
|
|
color: 'red',
|
|
make: 'Ford',
|
|
model: 'Mustang',
|
|
owner: 'Brad',
|
|
},
|
|
{
|
|
color: 'green',
|
|
make: 'Hyundai',
|
|
model: 'Tucson',
|
|
owner: 'Jin Soo',
|
|
},
|
|
{
|
|
color: 'yellow',
|
|
make: 'Volkswagen',
|
|
model: 'Passat',
|
|
owner: 'Max',
|
|
},
|
|
{
|
|
color: 'black',
|
|
make: 'Tesla',
|
|
model: 'S',
|
|
owner: 'Adriana',
|
|
},
|
|
{
|
|
color: 'purple',
|
|
make: 'Peugeot',
|
|
model: '205',
|
|
owner: 'Michel',
|
|
},
|
|
{
|
|
color: 'white',
|
|
make: 'Chery',
|
|
model: 'S22L',
|
|
owner: 'Aarav',
|
|
},
|
|
{
|
|
color: 'violet',
|
|
make: 'Fiat',
|
|
model: 'Punto',
|
|
owner: 'Pari',
|
|
},
|
|
{
|
|
color: 'indigo',
|
|
make: 'Tata',
|
|
model: 'Nano',
|
|
owner: 'Valeria',
|
|
},
|
|
{
|
|
color: 'brown',
|
|
make: 'Holden',
|
|
model: 'Barina',
|
|
owner: 'Shotaro',
|
|
},
|
|
];
|
|
|
|
for (let i = 0; i < cars.length; i++) {
|
|
cars[i].docType = 'car';
|
|
await ctx.stub.putState('CAR' + i, Buffer.from(JSON.stringify(cars[i])));
|
|
console.info('Added <--> ', cars[i]);
|
|
}
|
|
console.info('============= END : Initialize Ledger ===========');
|
|
}
|
|
|
|
async queryCar(ctx, carNumber) {
|
|
const carAsBytes = await ctx.stub.getState(carNumber); // get the car from chaincode state
|
|
if (!carAsBytes || carAsBytes.length === 0) {
|
|
throw new Error(`${carNumber} does not exist`);
|
|
}
|
|
console.log(carAsBytes.toString());
|
|
return carAsBytes.toString();
|
|
}
|
|
|
|
async createCar(ctx, carNumber, make, model, color, owner) {
|
|
console.info('============= START : Create Car ===========');
|
|
|
|
const car = {
|
|
color,
|
|
docType: 'car',
|
|
make,
|
|
model,
|
|
owner,
|
|
};
|
|
|
|
await ctx.stub.putState(carNumber, Buffer.from(JSON.stringify(car)));
|
|
console.info('============= END : Create Car ===========');
|
|
}
|
|
|
|
async queryAllCars(ctx) {
|
|
const startKey = 'CAR0';
|
|
const endKey = 'CAR999';
|
|
const allResults = [];
|
|
for await (const {key, value} of ctx.stub.getStateByRange(startKey, endKey)) {
|
|
const strValue = Buffer.from(value).toString('utf8');
|
|
let record;
|
|
try {
|
|
record = JSON.parse(strValue);
|
|
} catch (err) {
|
|
console.log(err);
|
|
record = strValue;
|
|
}
|
|
allResults.push({ Key: key, Record: record });
|
|
}
|
|
console.info(allResults);
|
|
return JSON.stringify(allResults);
|
|
}
|
|
|
|
async changeCarOwner(ctx, carNumber, newOwner) {
|
|
console.info('============= START : changeCarOwner ===========');
|
|
|
|
const carAsBytes = await ctx.stub.getState(carNumber); // get the car from chaincode state
|
|
if (!carAsBytes || carAsBytes.length === 0) {
|
|
throw new Error(`${carNumber} does not exist`);
|
|
}
|
|
const car = JSON.parse(carAsBytes.toString());
|
|
car.owner = newOwner;
|
|
|
|
await ctx.stub.putState(carNumber, Buffer.from(JSON.stringify(car)));
|
|
console.info('============= END : changeCarOwner ===========');
|
|
}
|
|
|
|
}
|
|
|
|
module.exports = FabCar;
|