Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Guotian-Dev/FabricJavaSDKExamples

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 

Repository files navigation

FabricJavaSDKExamples

Fabric JAVA SDK测试样例

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

1.1 测试代码结构说明

├── pom.xml
├── 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对象设置调用链码的名称参数等等信息发起调用链码
package ijarvis.intelliq.Fabric;
// 省略相关的包导入
public class SampleUser implements User {
    private final String certFolder;
    private final String userName;
    public SampleUser(String certFolder, String userName) {
        this.certFolder = certFolder;
        this.userName = userName;
    }
    //省略相关Set和Get方法
    
    /**
    * 
    * 重要实现方法,不使用CA需要自己实现如何加载私钥以及证书信息
    */
    @Override
    public Enrollment getEnrollment() {
        return new Enrollment() {

            @Override
            public PrivateKey getKey() {
                try {
                    return loadPrivateKey(Paths.get(certFolder, "/keystore/ea2db84973c9c54436c47d7e10b9b63420f654ecd7c541fab14646e976294393_sk"));
                } catch (Exception e) {
                    return null;
                }
            }
            @Override
            public String getCert() {
                try {
                    return new String(Files.readAllBytes(Paths.get(certFolder, "/signcerts/[email protected]")));
                } catch (Exception e) {
                    return "";
                }
            }
        };
    }
    
    //测试代码所以固定写死相关的MSPID
    @Override
    public String getMspId() {
        return "Org1MSP";
    }
    /***
     * 实现加载证书服务
     */
    public static PrivateKey loadPrivateKey(Path fileName) throws IOException, GeneralSecurityException {
        PrivateKey key = null;
        InputStream is = null;
        try {
            is = new FileInputStream(fileName.toString());
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            StringBuilder builder = new StringBuilder();
            boolean inKey = false;
            for (String line = 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());
            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);
            KeyFactory kf = KeyFactory.getInstance("ECDSA");
            key = kf.generatePrivate(keySpec);
        } finally {
            is.close();
        }
        return key;
    }
}

1.3、其他说明

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

About

Fabric JAVA SDK测试样例

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 89.3%
  • Go 10.7%