Skcript Technologies Private Limited

← All Articles

Hyperledger Composer NodeJS SDK - Submiting Transactions

— Written by

Hyperledger Composer NodeJS SDK - Submiting Transactions

In my previous article, I spoke about how to setup the Hyperledger Composer NodeJS SDK with expressJS to build your own RESTFul API for a Composer Business Network. And this article is a continuation of it where it’s about how to create and submit transactions.

Create Asset Definition

As the first step, let’s create an asset say “Car” in our example, which has set of properties. Define them in your model file of composer (.cto)

asset Car identified by id {
  o String id
  o Integer name
  --> User owner

The above defined asset Car has three properties named id, name, owner. And in order to create a Car we need to have a transaction, thus define a transaction model as below.

transaction addNewCard {
  o String id
  o String name

As you can notice, here we’re not mentioning the owner while creating the car, since we’ll be using the getCurrentParticipant() method inside transaction processor function to get the current user and define the owner.

 * A transaction to send good to an organization
 * @param {org.acme.addNewCard} name A human description of the parameter
 * @transaction
function  addNewCard(transaction) {
  var newCard;
  var factory = getFactory();
  var cId = getRandomId();
  var owner = getCurrentParticipant();
  return getParticipantRegistry("org.acme.Car").then(function(carRegistry) {
    newCar = factory.newResource("org.acme", "Car", cId); =;
    newCar.owner = transaction.owner;
    return carRegistry.add(newCar);

Now since we’ve everything in our network, let’s update the network with the following commands.

composer archive create -t dir -n .
composer network update -a acme-network@0.0.1.bna -c admin@acme-network

Creating EndPoint For Transaction

Next up is to create an endpoint for transaction submission. We do it with express js as follows.'/api/createCard', function (req, res) {
  var transactionData = req.body.transactionData;
  var cardName = req.headers.authorization;
  var mynetwork = new MyNetwork(cardName);

  mynetwork.init().then(function () {
      return mynetwork.createCar(transactionData)
  }).then(function () {
      res.json({ success: true })
  }).catch(function (error) {
      res.status(500).json({error: error.toString()})    

This is very similar to the ping method, we’re getting the transaction data from the request and passing it to createCar method in our MyNetwork Class.

createCar(transactionData) {
  var _this = this;
  var resource;
  var transactionData;
  transactionData['$class'] = "org.acme.createCar";
  return this.connection.getTransactionRegistry("org.acme.createCar")
    .then(function(createProductTransactionRegistry) {
      serializer = _this.businessNetworkDefinition.getSerializer()
      resource = serializer.fromJSON(transactionData);
      return _this.connection.submitTransaction(resource);

This returns a null if the transaction is submitted successfully, else catch block is called with the captured error.

The only thing to have in mind is that we need to specify the $class in transactionData and convert it to resource format from JSON before passing it to submitTransaction function.

Up next

Six ways the blockchain can be an advantage for Supply Chain
Skcript /svr/hyperledger-composer-nodejs-sdk-submiting-transactions/ /svrmedia/heroes/f/hyperledger-composer-transactions.jpg
Skcript Technologies Private Limited

Book a free consultation

Book a time with our consultants to discuss your project and get a free quote. No strings attached.