blockchain,dev | 2018-02-12T18:51:52+05:30

Hyperledger Composer NodeJS SDK - Submiting Transactions

Hellonext, Inc.

Varun Raj

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);;
    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) {
      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.

Last updated: September 7th, 2023 at 7:42:06 AM GMT+0

Hellonext Blogpost Author Profile

Varun Raj

Varun is one of the founders of Hellonext. He has helped companies like Google build large-scale developer communities to build strong developer relationships. He has build over 50 SaaS products in his career.