当前位置: 首页 > news >正文

手机微信网站怎么做的建工网校app免费下载

手机微信网站怎么做的,建工网校app免费下载,无锡网站推广优化公司,招聘网站开发需要多长时间一.检查配置环境 检查虚拟机环境#xff0c;确保有正在运行的Hyperledger Fabric区块链#xff0c;并且其中chaincode_basic、credit_chaincode链码可以正常调用 查看chaincode_basic、credit_chaincode链码调用 二.开发征信链码代码 基于现有征信链码#xff0c;开发征信…一.检查配置环境 检查虚拟机环境确保有正在运行的Hyperledger Fabric区块链并且其中chaincode_basic、credit_chaincode链码可以正常调用 查看chaincode_basic、credit_chaincode链码调用 二.开发征信链码代码  基于现有征信链码开发征信链码的升级版使用chaincode-init文件夹中的基础链码模板创建完善其中lib目录以及index.js内容在lib中创建CreditPlusContract对象在对象中添加createCreditSubjectPlus功能实现征信主体的保存定义subject变量属性包括key:征信主体主键,  organizationName征信主体评价机构名, type评价类型score征信积分creator创建人datetime评价时间其中属性除score外其余都为string类型。将subject内容上链保存   在链码中添加征信主体查询功能queryCreditSubjectPlus要求能够查询所有主体内容包括key:征信主体主键,  organizationName征信主体评价机构名, type评价类型score征信积分creator创建人datetime评价时间 use strict; const { Contract } require(fabric-contract-api); class CreditPlusContract extends Contract {async createCreditSubjectPlus(ctx, key, organizationName, type, creator, datetime) {console.info( START:创建征信主体 );const subject {key: key,organizationName: organizationName,type: type,score: 0,creator: creator,datetime: datetime};await ctx.stub.putState(key, Buffer.from(JSON.stringify(subject)));console.info( END:创建征信主体 );return subject;}// 查询征信主体async queryCreditSubjectPlus(ctx, subjectKey) {console.info( START : 查询征信主体 );const bytes await ctx.stub.getState(subjectKey);if (!bytes || bytes.length 0) {const msg ${subjectKey} 征信主体不存在;console.warn(msg);throw new Error(msg);}const subject JSON.parse(bytes.toString());console.info( END : 查询征信主体 );return subject;}}module.exports CreditPlusContract; 在链码结构中test目录中添加对于createCreditSubjectPlus以及QueryCreditSubjectPlus功能的单元测试提交测试代码和验证结果。 use strict; const sinon require(sinon); const chai require(chai); const sinonChai require(sinon-chai); const expect chai.expect; chai.use(sinonChai); let assert sinon.assert; const { Context } require(fabric-contract-api); const { ChaincodeStub, ClientIdentity } require(fabric-shim); const CreditPlusContract require(../lib/creditContract); describe(Credit Chaincode Test, () {let stub, ctx, ClientId;beforeEach(() {ctx new Context();stub sinon.createStubInstance(ChaincodeStub);stub.getMspID.returns(Org1);ctx.setChaincodeStub(stub);ClientId sinon.createStubInstance(ClientIdentity);stub.putState.callsFake((key, value) {if (!stub.states) {stub.states {};}stub.states[key] value;});stub.getState.callsFake(async (key) {let ret;if (stub.states) {ret stub.states[key];}return Promise.resolve(ret);});stub.deleteState.callsFake(async (key) {if (stub.states) {delete stub.states[key];}});});describe(Test CreditSubject function, () {it(should return success on createCreditSubject, async () {let creditContract new CreditPlusContract();let creditSubject await creditContract.createCreditSubjectPlus(ctx, A001, My Company, Company,Admin,2024-05-28 14:35:00);let scroe creditSubject.score;expect(scroe).to.equals(0);});it(should return success on queryCreditSubject, async () {let creditContract new CreditPlusContract();await creditContract.createCreditSubjectPlus(ctx, A001, My Company, Company, Admin, 2024-05-28 14:35:00);let creditSubject await creditContract.queryCreditSubjectPlus(ctx, A001);let name creditSubject.organizationName;expect(name).to.equals(My Company);});}); }) 测试代码: 三.部署征信链码 在虚拟机指定Hyperledger Fabric中实现对应链码的部署并验证部署情况。 将链码名修改切credit_chaincode_plus删除node_modules目录以及对应package-lock.json文件上传至服务器chaincode目录下 打包测试: export FABRIC_CFG_PATH${PWD}/configpeer lifecycle chaincode package ./chaincode/credit_chaincode_plus.tar.gz --path ./chaincode/credit_chaincode_plus --lang node --label credit_chaincode_plus_1.0 查看打包结果: 安装链码运行以下进入fabric-cli容器 docker exec -it fabric-cli bash 1. 在org1中安装运行以下链码安装 . scripts/set-env.sh 1 0 7051 peer lifecycle chaincode install chaincode/credit_chaincode_plus.tar.gz 2. 在org2中安装运行以下链码安装 . scripts/set-env.sh 2 0 9051 peer lifecycle chaincode install chaincode/credit_chaincode_plus.tar.gz 3. 查看安装情况 peer lifecycle chaincode queryinstalled 批准链码 org1批准链码 1. 设置链码环境变量 export CC_PACKAGE_IDcredit_chaincode_plus_1.0:9415a0be8812a91c2e510619a4d2a6a5cd06a8cf8f9cef96ee4eec2f456ab7ec 2. 设置Org1环境变量 . scripts/set-env.sh 1 0 7051 3.批准链码 peer lifecycle chaincode approveformyorg -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com --channelID $CHANNEL_NAME --name credit_chaincode_plus --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile $ORDERER_CA 1. 设置Org2环境变量 . scripts/set-env.sh 2 0 9051 2.批准链码 peer lifecycle chaincode approveformyorg -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com --channelID $CHANNEL_NAME --name credit_chaincode_plus --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile $ORDERER_CA 检查提交准备 peer lifecycle chaincode checkcommitreadiness --channelID $CHANNEL_NAME --name credit_chaincode_plus --version 1.0 --sequence 1 --tls --cafile $ORDERER_CA --output json 提交链码 peer lifecycle chaincode commit -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com --channelID $CHANNEL_NAME --name credit_chaincode_plus --version 1.0 --sequence 1 --tls --cafile $ORDERER_CA --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles $PEER0_ORG1_CA --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles $PEER0_ORG2_CA 查询提交的链码 peer lifecycle chaincode querycommitted --channelID $CHANNEL_NAME --name credit_chaincode_plus --tls --cafile $ORDERER_CA 查看运行镜像形成容器情况 docker logs -f b1ddd21303a5 调用createCreditSubject功能 peer chaincode invoke -o orderer.example.com:7050 --tls --cafile $ORDERER_CA --channelID $CHANNEL_NAME --name credit_chaincode_plus --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles $PEER0_ORG1_CA --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles $PEER0_ORG2_CA -c {function:createCreditSubjectPlus, Args:[A001, My Company, Company,Admin,2024-05-28 14:35:00]} 调用queryCreditSubject功能 peer chaincode query -C $CHANNEL_NAME --name credit_chaincode_plus -c {function:queryCreditSubjectPlus,Args:[A001]} 四.部署删除和更新代码  在链码中添加DeleteCreditSubject实现按subject变量的key属性删除数据功能 在链码中添加UpdateSubjectScore功能实现按key更新subject更新subject变量中的score use strict;const { Contract } require(fabric-contract-api);class CreditPlusContract extends Contract {async createCreditSubjectPlus(ctx, key, organizationName, type, creator, datetime) {console.info( START:创建征信主体 );const subject {key: key,organizationName: organizationName,type: type,score: 0,creator: creator,datetime: datetime};await ctx.stub.putState(key, Buffer.from(JSON.stringify(subject)));console.info( END:创建征信主体 );return subject;}// 查询征信主体async queryCreditSubjectPlus(ctx, subjectKey) {console.info( START : 查询征信主体 );const bytes await ctx.stub.getState(subjectKey);if (!bytes || bytes.length 0) {const msg ${subjectKey} 征信主体不存在;console.warn(msg);throw new Error(msg);}const subject JSON.parse(bytes.toString());console.info( END : 查询征信主体 );return subject;}async deleteCreditSubject(ctx, id) {const exists await this.creditSubjectExists(ctx, id);if (!exists) {throw new Error(The asset ${id} does not exist);}return ctx.stub.deleteState(id);}async creditSubjectExists(ctx, id) {const assetJSON await ctx.stub.getState(id);return assetJSON assetJSON.length 0;}async updateSubjectScore(ctx,subjectKey,inputScore) {const exists await this.creditSubjectExists(ctx,subjectKey);if (!exists) {throw new Error(The credit subject ${subjectKey} does not exist);}const bytes await ctx.stub.getState(subjectKey);if (!bytes || bytes.length 0){const msg ${subjectKey} 征信主体不存在;console.warn(msg)throw new Error (msg);}var subject JSON.parse(bytes.toString());subject.scoreinputScore;return ctx.stub.putState(subjectKey, Buffer.from(JSON.stringify(subject)));}}module.exports CreditPlusContract; 在链码结构中test目录中添加对于DeleteCreditSubject以及UpdateSubjectScore功能的单元测试  use strict; const sinon require(sinon); const chai require(chai); const sinonChai require(sinon-chai); const expect chai.expect; chai.use(sinonChai); let assert sinon.assert; const { Context } require(fabric-contract-api); const { ChaincodeStub, ClientIdentity } require(fabric-shim); const CreditPlusContract require(../lib/creditContract); describe(Credit Chaincode Test, () {let stub, ctx, ClientId;beforeEach(() {ctx new Context();stub sinon.createStubInstance(ChaincodeStub);stub.getMspID.returns(Org1);ctx.setChaincodeStub(stub);ClientId sinon.createStubInstance(ClientIdentity);stub.putState.callsFake((key, value) {if (!stub.states) {stub.states {};}stub.states[key] value;});stub.getState.callsFake(async (key) {let ret;if (stub.states) {ret stub.states[key];}return Promise.resolve(ret);});stub.deleteState.callsFake(async (key) {if (stub.states) {delete stub.states[key];}});});describe(Test CreditSubject function, () {it(should return success on createCreditSubject, async () {let creditContract new CreditPlusContract();let creditSubject await creditContract.createCreditSubjectPlus(ctx, A001, My Company, Company,Admin,2024-05-28 14:35:00);let scroe creditSubject.score;expect(scroe).to.equals(0);});it(should return success on queryCreditSubject, async () {let creditContract new CreditPlusContract();await creditContract.createCreditSubjectPlus(ctx, A001, My Company, Company, Admin, 2024-05-28 14:35:00);let creditSubject await creditContract.queryCreditSubjectPlus(ctx, A001);let name creditSubject.organizationName;expect(name).to.equals(My Company);});it(should return sucess on DeleteCreditSubject, async () {let creditContract new CreditPlusContract();await creditContract.createCreditSubjectPlus(ctx, A001, My Company, Company, Admin, 2024-05-28 14:35:00);await creditContract.deleteCreditSubject(ctx,A001);let ret await stub.getState(A001);expect(ret).to.equal(undefined);});it(should return sucess on updateSubjectScore, async () {let creditContract new CreditPlusContract();await creditContract.createCreditSubjectPlus(ctx, A001, My Company, Company, Admin, 2024-05-28 14:35:00);await creditContract.updateSubjectScore(ctx, A001,10);let ret JSON.parse(await stub.getState(A001));expect(ret.score).to.eql(10);});}); }) 测试代码: 五.更新部署征信链码 在链码中重新部署开发链码实现链码更新要求version、sequence有迭代痕迹 打包测试: export FABRIC_CFG_PATH${PWD}/configpeer lifecycle chaincode package ./chaincode/credit_chaincode_plus.tar.gz --path ./chaincode/credit_chaincode_plus --lang node --label credit_chaincode_plus_1.1 安装链码 运行以下进入fabric-cli容器 docker exec -it fabric-cli bash 1. 在org1中安装 | 运行以下链码安装 . scripts/set-env.sh 1 0 7051 peer lifecycle chaincode install chaincode/credit_chaincode_plus.tar.gz 2. 在org2中安装 运行以下链码安装 . scripts/set-env.sh 2 0 9051 peer lifecycle chaincode install chaincode/credit_chaincode_plus.tar.gz 3. 查看安装情况 peer lifecycle chaincode queryinstalled 三.批准链码 org1批准链码 设置链码环境变量 export CC_PACKAGE_IDcredit_chaincode_plus_1.1:a7d65de21f706c25029b84cbbf7de2163d06d9b8e9fc33fd20a5a59cc3a18b01 2. 设置Org1环境变量 . scripts/set-env.sh 1 0 7051 3.批准链码 peer lifecycle chaincode approveformyorg -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com --channelID $CHANNEL_NAME --name credit_chaincode_plus --version 1.1 --package-id $CC_PACKAGE_ID --sequence 2 --tls --cafile $ORDERER_CA 1. 设置Org2环境变量 . scripts/set-env.sh 2 0 9051 2.批准链码 peer lifecycle chaincode approveformyorg -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com --channelID $CHANNEL_NAME --name credit_chaincode_plus --version 1.1 --package-id $CC_PACKAGE_ID --sequence 2 --tls --cafile $ORDERER_CA 检查提交准备 peer lifecycle chaincode checkcommitreadiness --channelID $CHANNEL_NAME --name credit_chaincode_plus --version 1.1 --sequence 2 --tls --cafile $ORDERER_CA --output json 提交链码 peer lifecycle chaincode commit -o orderer.example.com:7050 --ordererTLSHostnameOverride orderer.example.com --channelID $CHANNEL_NAME --name credit_chaincode_plus --version 1.1 --sequence 2 --tls --cafile $ORDERER_CA --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles $PEER0_ORG1_CA --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles $PEER0_ORG2_CA 查询提交的链码 peer lifecycle chaincode querycommitted --channelID $CHANNEL_NAME --name credit_chaincode_plus --tls --cafile $ORDERER_CA 查看运行镜像形成容器情况 docker logs -f b1ddd21303a5 调用createCreditSubject功能 peer chaincode invoke -o orderer.example.com:7050 --tls --cafile $ORDERER_CA --channelID $CHANNEL_NAME --name credit_chaincode_plus --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles $PEER0_ORG1_CA --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles $PEER0_ORG2_CA -c {function:createCreditSubjectPlus, Args:[A001, My Company, Company,Admin,2024-05-28 14:35:00]} 调用queryCreditSubject功能 peer chaincode query -C $CHANNEL_NAME --name credit_chaincode_plus -c {function:queryCreditSubjectPlus,Args:[A001]} 调用deleteCreditSubject功能 peer chaincode invoke -o orderer.example.com:7050 --tls --cafile $ORDERER_CA --channelID $CHANNEL_NAME --name credit_chaincode_plus --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles $PEER0_ORG1_CA --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles $PEER0_ORG2_CA -c {function:deleteCreditSubject, Args:[A001]} 调用updateSubjectScore功能(这边如果嫌麻烦的话可以更新功能之后再调用删除功能) peer chaincode invoke -o orderer.example.com:7050 --tls --cafile $ORDERER_CA --channelID $CHANNEL_NAME --name credit_chaincode_plus --peerAddresses peer0.org1.example.com:7051 --tlsRootCertFiles $PEER0_ORG1_CA --peerAddresses peer0.org2.example.com:9051 --tlsRootCertFiles $PEER0_ORG2_CA -c {function:updateSubjectScore, Args:[A002,10]}
http://www.hkea.cn/news/14276907/

相关文章:

  • 电子商务网站运营图片在线制作免费软件
  • 金融网站建设方案wordpress搜索框代码
  • jsp网站制作详细教程广州工商学院官网
  • 好看的手机网站布局自助建站信息发布网企业
  • 江门找人做网站排名怎样搭建大型企业网络
  • 天津做企业网站公司企业搭建网站多少钱
  • 北京做百度网站花西子品牌营销策略分析
  • 保险微网站制作平面设计价格收费表
  • 福永自适应网站建汽车报价网址
  • 珠海左右创意园网站开发海尔工业互联网公司排名
  • 哪块行业需要网站建设使用h5做的学习网站源码
  • 北京兼职网站建设怎样看一个网站是谁做的
  • 信息发布型网站wordpress快速入门指南布局篇
  • 中企动力网站策划wordpress批量alt代码
  • 网站建设问题及解决办法选服务好的网站建设
  • 西安免费网站建站模板校园局域网设计方案
  • 哪个医学网站大夫可以做离线题推荐10个网站
  • 苏州建设网站wordpress iis6 伪静态
  • 网站建设问卷调研郑州搜索引擎优化
  • 企业网站建江津哪个网站可以做顺风车
  • 天津网站维护坑梓网站建设基本流程
  • 电商网站开发的主流技术wordpress post存储
  • 比较好的源码网站wordpress主题修改菜鸟教程
  • 房产公司网站建设wordpress修改主题头部
  • 宜昌网站改版网站建设投放广告
  • 佛山市官网网站建设怎么样昆山网站建设书生商友
  • 中江建设银行网站企业网站备案流几天
  • 上海网站建设找摩彼做网站的的价位
  • 简单企业网站建设免费云主机试用一年
  • 购买手机网站推荐网站建设简单流程