×
  • 澳门新莆京娱乐网站
  • 问卷调查
  • 问卷调查系统
  • 区块链
  • 大数据
  • 数据中心
  • 创建问卷
问卷调查系统工具软件推荐
区块链

使用Node.js开发Hyperledger Fabric Chaincode

       }


async addMarks(ctx,studentId,subject1,subject2,subject3) {


        “mocha”: “^5.2.0”,


       subj3:subject3

添加标志:


智能合约:


从Ledger删除“Alice”符号

       subj2:subject2,


            “test/**”


}


    if (!marksAsBytes || marksAsBytes.toString().length <= 0) {


您可以在此处找到完整的智能合约。https://gist.github.com/Salmandabbakuti/fb25d0429359c6d77ab64d097c5b588c


除了LevelDB,尚有另一个用于Hyperledger Fabric的数据库称为CouchDB。CouchDB是可选的替代外部可插拔状态数据库。与LevelDB键值存储一样,CouchDB可以存储以链码建模的任何二进制数据。但作为JSON文档存储,当将Chaincode值(譬喻资产)建模为JSON数据时,CouchDB还可以对Chaincode数据举办富厚的查询。


使您的构建具有可复制性,因此更易于与其他开拓人员共享.

    “engineStrict”: true,


    let marks=JSON.parse(marksAsBytes.toString()); 


     let marksAsBytes = await ctx.stub.getState(studentId); 


它是fabric-contract-api中的接口,用于会见和修改分类帐(数据库状态)。因此它是主要数据Chaincode接口,用于在分类账上读写数据,我们如何读写数据?让我们看一下Stub界面中的一些常用要领


    “description”: “my first exciting node.js chaincode on Hyperledger-fabric”,


./start.sh


Chaincode可以利用Go,Nodejs,Java编写。其他两种语言对比,Node.js是一种更容易领略和利用的语言。由于Node.js文档中可用的信息很是少,但编写和陈设Node.js Chaincode并不坚苦。因此我抉择编写一些Node.js Chaincode的观念,并慢慢编写和陈设简朴的Chaincode。


为了安装和测试此智能合约,我将利用包括单个peer的根基网络。在这个网络上,我们将安装名为mycc的Node.js的chaincode到peer0.org1.example.com上,并在通道mychannel上实例化它。然后我们可以挪用这些chaincode函数。确保在您的配置中安装了docker。为了简朴起见,我已经将chaincode文件(logic.js,index.js,package.json)安装在chaincode/newcc目次中。


await  ctx.stub.putState(studentId,Buffer.from(JSON.stringify(marks))); 


由于我们要用Nodejs编写Chaincode,因此我们首先需要建设传统的npm对象,譬喻package.json和index.js。假如您不知道此package.json。


const { Contract} = require(‘fabric-contract-api’);

     subj3:subject3 


       throw new Error(’Student with this Id does not exist: ‘); 


async queryMarks(ctx,studentId){


            “html”


const { Contract}=require(’fabric-contract-api’);


1.fabric-contract-api:


peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n mycc -l “node” -v 1.0 -c ‘{“Args”:[]}’


 Chaincode组件


2.检索标志涉及从分类帐读取数据。因此我们需要利用getState(k)要领。


    await ctx.stub.putState(studentId,Buffer.from(JSON.stringify(marks))); 

5.getTxID():


    },

         } 


Hyperledger Fabric数据库


    “scripts”: {


}


 class testContract extends Contract {


    “dependencies”: {


我还建造了一个自动化剧本,用于在客户端目次中安装和测试此chaincode。请凭据以下步调举办快速演示


async addMarks(ctx,studentId,subject1,subject2,subject3) { 


        ],


假如您可以仔细调查代码,则有一行“ main”:“ index.js”。这意味着什么—在启动时(安装chaincode期间),npm模块用于查抄index.js并在peer节点上安装提到的合约。”因此我们的index.js包括作为模块导出的合约。


在深入研究Chaincode之前,首先让我们看一下Hyperledger Fabric Network中数据的存储位置。Hyperledger Fabric利用键值数据库存储其状态。默认环境下,Fabric利用LevelDB。该数据库生存可以利用其键查询的特定工具的二进制数据。与传统的数据库差异,区块链数据库位于网络的每个peer上。因此它被称为分手网络。

        “branches”: 100,


     subj1:subject1, 

  }


我们的业务逻辑是什么?

peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n 

Stub接口中的常用要领


我们将建设一个JavaScript工具来存储每个学科中学生的后果,并将该工具存储为一个值,并将StudentId存储为一个键。通过处事器将数据发送到数据库时,数据必需是字符串。因此我们需要利用JSON.stringify()要领将此标志工具转换为字符串,并应用缓冲区以二进制数据的形式发送到数据库。


   }


            “coverage/**”,


期待半晌。成立网络将需要一段时间。假如碰着任何权限错误,只需在root用户权限下运行就行。一旦我们的具有单个peer的网络成立并运行,我们就可以安装chaincode。


    }


cd ..


mycc -c ‘{“function”:”queryMarks”,”Args”:[“Alice”]}’


module.exports.contracts = [ testContract ];


      throw new Error(‘Student with this Id does not exist: ‘);


  }


git clone https://github.com/Salmandabbakuti/hlf-chaincodeTest.git


async deleteMarks(ctx,studentId) {


添加,检索和删除学生标志。


    },


安装和实例化Chaincode


        “node”: “>=8”,


cd client  #change your directory to client


我们在这里演示了什么是Chaincode,chaincode的stub接口中的要领,chaincode的陈设布局以及编写chaincode和在网络长举办陈设的难易水平。但愿本文能以某种方法辅佐您开始编写chaincode并在网络长举办陈设。

此要领将数据写入分类帐。它以“ k”为键,“ v”为值。明晰地说,假设我们想将Alice的年数存储到分类帐中,我们可以将Alice作为键,并将AGE作为值。


    “engines”: {

‘use strict’;


        “fabric-shim”: “~1.4.0”


    },


众所周知,Hyperledger Fabric数据库以键值对的形式存储数据。


首先,我们需要启动网络并建设通道。


peer chaincode query -o orderer.example.com:7050 -C mychannel -n 


编写您的第一个Chaincode


    let marksAsBytes = await ctx.stub.getState(studentId); 


console.log(’Student Marks added To the ledger Succesfully..’); 


mycc -c ‘{“function”:”deleteMarks”,”Args”:[“Alice”]}’


在Hyperledger Fabric中,Chaincode是在网络peer上运行的一段代码,用于实现应用措施如何与分类帐交互的业务逻辑。提出生意业务时,它会触发Chaincode,该Chaincode抉择应将哪种状态变动应用于分类帐。因此为了在Hyperledger Fabric上开拓去中心化的应用措施,必需编写称为Chaincode的应用措施逻辑。


查询学生后果:


    console.log(‘Student Marks deleted from the ledger Succesfully..’);


    }


为了安装和挪用chaincode,我们可以利用Peer的CLI容器。输入CLI容器


此要领从分类账中删除关联密钥“ k”的值。


        “all”: true,


    “name”: “Test-Chaincode”,


    “author”: “Hyperledger”,


        “exclude”: [


console.log(’Student Marks deleted from the ledger Succesfully..’);

    }


您也可以利用client / start.sh文件中界说的剧本手动挪用chaincode函数。


        ],

Hyperledger Fabric术语中的Chaincode是什么?
    console.log(‘Student Marks added To the ledger Succesfully..’);

    let marks={

async queryMarks(ctx,studentId) {

        “reporter”: [
        “statements”: 100,
 await ctx.stub.deleteState(studentId); 

     subj2:subject2,
chmod a+x start.sh

        “sinon-chai”: “^3.2.0”

module.exports=testContract;
    await ctx.stub.deleteState(studentId); 
6.getTxTimestamp():
       subj1:subject1,
}
{
要害词: Node.js  Hyperledger  


此要领从分类帐读取数据。它以输入“ k”作为键,并返回与键“ k”关联的二进制值。


此要领返回被挪用事务的事务ID。生意业务ID对付链上的每个生意业务都是独一的。因此生意业务ID在跟踪生意业务中起着至关重要的浸染。

            “text-summary”,


2.putState(k,v):


1.getState(k):


查询学生“Alice”的符号


此要领在分类帐中的一组键上返回范畴迭代器。它将迭代startKey(k1)和endKey(k9)并返回这两个键之间的所有键值。这雷同于javascript中的for轮回。假设假如我们已经按键k1,k2,k3…k99的顺序存储了一些用户数据,则可以利用此要领简朴地获取所有这些值的状态。

    “devDependencies”: {


利用语义版本节制法则指定项目可以利用的软件包的版本


列出您的项目所依赖的软件包


     if (!marksAsBytes || marksAsBytes.toString().length <= 0) { 


        “lines”: 100


        “nyc”: “^12.0.2”,


3.删除标志涉及删除数据。因此我们需要利用deleteState(k)要领。


增加学生符号


    },


peer chaincode install -n mycc -v 1.0 -p “/opt/gopath/src/github.com/newcc” -l “node”

exit # exits from CLI docker container if you’re in


const testContract = require(’./logic’);


2.fabric-shim:


      let marks=JSON.parse(marksAsBytes.toString());


删除标志


此要领返回建设事务时的时间戳。这是从生意业务ChannelHeader获取的,因此它将指示客户的时间戳,而且在所有背书人中都具有沟通的值。


最终版智能合约代码


‘use strict’;


首先,退出CLI容器并在客户端目次中运行剧本


您已经相识了在node.js中编写链码的一些先决条件。因此就今朝而言,您大概会很是欢快地编写您的第一个chaincode。


     }; 


由于我们在先前的addMarks()函数中将值以缓冲区的形式安排。一旦查询,它将返回buffer。因此我们需要将缓冲区转换为字符串并将其理会为原始javascript工具。


简而言之,我们的Chaincode取决于fabric-contract-api和fabric-shim模块。我们在package.json中提到了这些软件包和版本。


上面的剧本将从账本中删除密钥“ Alice”和相关数据。假如再次查询Alice的标志,则会收到一条错误动静,提示“ studentId不存在”。


        “functions”: 100,


这是我们的package.json:

//Functions go here


mycc -c ‘{“function”:”addMarks”,”Args”:[“Alice”,”68″,”84″,”89″]}’


        “test”: “nyc mocha –recursive”,


4.getStateByRange(k1,k9):


    return JSON.stringify(marks); 


cd hlf-chaincodeTest/basic-network


    “nyc”: {


   let marks={


    “version”: “1.0.0”,


用于实现智能合约的初级合约API(作为npm模块提供)


        “check-coverage”: true,

        “sinon”: “^6.0.0”,


这是我们的index.js文件:


async deleteMarks(ctx,studentId) {


我们还将添加fabric-chaincode-node start作为我们的启动剧本,这是在peer节点上安装chaincode所需的。

3.stub:


        “eslint”: “^4.19.1”,

      return JSON.stringify(marks);


docker exec -it cli bash

用于实现智能合约的高级合约API(作为npm模块提供)

我们可以将fabric-shim视为fabric-contract-api的递减版本。对新版本的fabric利用高级API是一个好习惯。可是fabric-contract-api可以完成shim可以做的所有工作。虽然不止如此。


        “pretest”: “npm run lint”,

    “license”: “Apache-2.0”,


3.deleteState(k):

}


    “main”: “index.js”,


chaincode首先从fabric-contract-api模块引入浸染域密钥类Contract。此类将用于编写逻辑,所有chaincode函数都应利用This库类。


class testContract extends Contract {


        “lint”: “eslint .”,

./start.sh  #Automated script for testing


        “start”: “fabric-chaincode-node start”


结论


        “npm”: “>=5”


1.添加标志涉及将数据写入分类帐。因此我们将从chaincode的stub接口利用putState(k,v)要领。


        “chai”: “^4.1.2”,


peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n 


        “fabric-contract-api”: “~1.4.0”,


       };

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

人已赞赏
区块链

浅谈成本市场如何助推区块链财富成长

2019-11-14 10:14:02

区块链

比特币的采用可能让政治实体将其视为正式货币

2019-11-14 12:11:18

问卷调查系统工具软件推荐
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索
XML 地图 | Sitemap 地图