# Hyperledger Fabric 2.0 java sdk使用入门 **Published by:** [kk](https://paragraph.com/@qiling/) **Published on:** 2022-08-23 **URL:** https://paragraph.com/@qiling/hyperledger-fabric-2-0-java-sdk ## Content 概述fabric官方提供的java sdk包含两个项目fabric-sdk-java和fabric-gateway-java,前者用于与fabric网络交互的低级API(比如创建channel、加入channel、安装chaincode等),fabric-sdk-java还包含了fabric-ca client的实现,后者为高级API(主要针对chaincode的调用),fabric-gateway-java使用了fabric-sdk-java的api。一、fabric-gateway-java的基本用法依赖<dependency> <groupId>org.hyperledger.fabric</groupId> <artifactId>fabric-gateway-java</artifactId> <version>2.0.0</version> </dependency> 官方示例:import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.nio.file.Paths; import java.util.concurrent.TimeoutException; import org.hyperledger.fabric.gateway.Contract; import org.hyperledger.fabric.gateway.ContractException; import org.hyperledger.fabric.gateway.Gateway; import org.hyperledger.fabric.gateway.Network; import org.hyperledger.fabric.gateway.Wallet; import org.hyperledger.fabric.gateway.Wallets; class Sample { public static void main(String[] args) throws IOException { // 载入一个存在的持有用户身份的钱包,用于访问fabric网络 Path walletDirectory = Paths.get("wallet"); Wallet wallet = Wallets.newFileSystemWallet(walletDirectory); //Path为fabric网络配置文件的路径 Path networkConfigFile = Paths.get("connection.json"); // 配置gateway连接用于访问fabric网络(用户和网络配置文件) Gateway.Builder builder = Gateway.createBuilder() .identity(wallet, "user1") .networkConfig(networkConfigFile); // 创建一个gateway连接 try (Gateway gateway = builder.connect()) { //根据gateway获取指定的通道网络 Network network = gateway.getNetwork("mychannel"); //根据chaincode名称从通道网络中获取智能合约 Contract contract = network.getContract("fabcar"); // 提交事务 存储到账本 byte[] createCarResult = contract.createTransaction("createCar") .submit("CAR10", "VW", "Polo", "Grey", "Mary"); System.out.println(new String(createCarResult, StandardCharsets.UTF_8)); // 从账本中查询状态 byte[] queryAllCarsResult = contract.evaluateTransaction("queryAllCars"); System.out.println(new String(queryAllCarsResult, StandardCharsets.UTF_8)); } catch (ContractException | TimeoutException | InterruptedException e) { e.printStackTrace(); } } } 这里抽象出了钱包、网关的概念,网关即API调用的入口,每个钱包可以存放多个用户身份,构造网关的时候指定钱包其中一个用户。 👌 ## Publication Information - [kk](https://paragraph.com/@qiling/): Publication homepage - [All Posts](https://paragraph.com/@qiling/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@qiling): Subscribe to updates