Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Fabric JAVA SDK测试样例

NotificationsYou must be signed in to change notification settings

zwc-deeplearning/FabricJavaSDKExamples

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fabric JAVA SDK测试样例

一、调用链码说明(不使用Fabric-CA模块)

1.1 测试代码结构说明

├── pom.xml├── doc# 运行结果图片├── cc# 使用Go实现的链码├── src│   ├── main│   │   ├── java│   │   │   └── ijarvis│   │   │       └── intelliq│   │   │           ├── FabricApp.java# 初始化Fabric Client对象以及连接组织信息│   │   │           ├── LedgerRecord.java# 链码中数据结构Bean│   │   │           └── SampleUser.java# 抽象超级账本中用户信息(实际就是MSP下user文件夹中生成的用户身份文件)│   │   └── resources│   │       └── log4j.xml  │   └──test│       ├── java│       │   └── ijarvis│       │       └── intelliq│       │           └── AppTest.java# Junit测试代码文件│       └── resources│           ├── crypto-config# 测试环境下所有证书以及MSP文件集合│           │   ├── ordererOrganizations│           │   │   └── example.com│           │   └── peerOrganizations│           │       ├── org1.example.com│           │       └── org2.example.com│           └── log4j.xml

由于调用链码调用初始化需要初始化fhclient等等一系列的对象,所以建议使用Junit运行代码。

1.2、 核心代码说明

使用SDk调用链码主要的步骤是:

  • 1、初始化HFClient
  • 2、实例化已经实现接口User的类加载已有的证书文件以及连接用户的私钥文件
  • 3、调用client.setUserContext(peer0org1);方法更新client的配置文件
  • 4、通过client获取通道对象(channel),客户端设置发起交易需要使用的Orderer以及Peer对象
  • 5、通过channel对象设置调用链码的名称参数等等信息发起调用链码
packageijarvis.intelliq.Fabric;// 省略相关的包导入publicclassSampleUserimplementsUser {privatefinalStringcertFolder;privatefinalStringuserName;publicSampleUser(StringcertFolder,StringuserName) {this.certFolder =certFolder;this.userName =userName;    }//省略相关Set和Get方法/**    *    * 重要实现方法,不使用CA需要自己实现如何加载私钥以及证书信息    */@OverridepublicEnrollmentgetEnrollment() {returnnewEnrollment() {@OverridepublicPrivateKeygetKey() {try {returnloadPrivateKey(Paths.get(certFolder,"/keystore/ea2db84973c9c54436c47d7e10b9b63420f654ecd7c541fab14646e976294393_sk"));                }catch (Exceptione) {returnnull;                }            }@OverridepublicStringgetCert() {try {returnnewString(Files.readAllBytes(Paths.get(certFolder,"/signcerts/Admin@org1.example.com-cert.pem")));                }catch (Exceptione) {return"";                }            }        };    }//测试代码所以固定写死相关的MSPID@OverridepublicStringgetMspId() {return"Org1MSP";    }/***     * 实现加载证书服务     */publicstaticPrivateKeyloadPrivateKey(PathfileName)throwsIOException,GeneralSecurityException {PrivateKeykey =null;InputStreamis =null;try {is =newFileInputStream(fileName.toString());BufferedReaderbr =newBufferedReader(newInputStreamReader(is));StringBuilderbuilder =newStringBuilder();booleaninKey =false;for (Stringline =br.readLine();line !=null;line =br.readLine()) {if (!inKey) {if (line.startsWith("-----BEGIN ") &&line.endsWith(" PRIVATE KEY-----")) {inKey =true;                    }continue;                }else {if (line.startsWith("-----END ") &&line.endsWith(" PRIVATE KEY-----")) {inKey =false;break;                    }builder.append(line);                }            }//byte[]encoded =DatatypeConverter.parseBase64Binary(builder.toString());PKCS8EncodedKeySpeckeySpec =newPKCS8EncodedKeySpec(encoded);KeyFactorykf =KeyFactory.getInstance("ECDSA");key =kf.generatePrivate(keySpec);        }finally {is.close();        }returnkey;    }}

1.3、其他说明

如果觉得所给测试用例代码不够明确,可以参考官方网站此处的代码示例本代码只是将官方代码进行简化方便做实验以及测试。

二、使用CA Server调用链码

与不通过CA模块调用的链码相比其实只差一个步骤,在不使用CA模块时构造SampleUser时我们要自己实现getEnrollment的方法,在该方法中需要我们自定义去加载私钥以及证书字节,但是有了CA模块后我们只需要在构建Sampleuser时调用

user1.setEnrollment(hfcaClient.enroll(user1.getName(),"admin"));

即可实现从CA中获取到私钥以及证书,发起ECer交易。详细的测试可以参见代码src/test/java/ijarvis/intelliq/FabricCA/FabricCATestUseCAServer.java

三、链码操作

本节主要介绍测试环境中链码的安装部署与实例化操作,希望通过该方法可以快速的验证测试链码环境中的问题

# 安装链码Shell> peer chaincode install -n epointchaincodecommon   -p epointchaincodecommon -v 0.1# 实例化链码操作Shell> peer chaincode instantiate -o orderer.example.com:7050  -C$CHANNEL_NAME  -c'{"Args":["init"]}' -P"OR  ('Org1MSP.member','Org2MSP.member')" -n epointchaincodecommon -v 0.1# 调用插入KV操作链码Shell> peer chaincode invoke -o orderer.example.com:7050   -C$CHANNEL_NAME -n epointchaincodecommon -v 0.1 -c'{"Args":["addkv","liuwenru","刘文儒"]}'# 调用更新KV操作链码Shell> peer chaincode invoke -o orderer.example.com:7050   -C$CHANNEL_NAME -n epointchaincodecommon -v 0.1 -c'{"Args":["updatekv","liuwenru","刘美丽"]}'# 调用查询KV操作链码Shell> peer chaincode invoke -o orderer.example.com:7050   -C$CHANNEL_NAME -n epointchaincodecommon -v 0.1 -c'{"Args":["query","liuwenru"]}'# 根绝给定的Key查询该账本中所有的历史操作Shell> peer chaincode invoke -o orderer.example.com:7050   -C$CHANNEL_NAME -n epointchaincodecommon -v 0.1 -c'{"Args":["queryhistory","liuwenru"]}'# 调用删除链码操作,注意,此删除操作只会删除账本中当前的值,对于账本中的历史值是不会删除的Shell> peer chaincode invoke -o orderer.example.com:7050   -C$CHANNEL_NAME -n epointchaincodecommon -v 0.1 -c'{"Args":["delkv","liuwenru"]}'

四、调用结果展示

五、学习笔记目录列表

About

Fabric JAVA SDK测试样例

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java87.8%
  • Go12.2%

[8]ページ先頭

©2009-2025 Movatter.jp