Add sdk java sample
parent
be15c3ad6f
commit
ee10e60386
|
@ -0,0 +1,11 @@
|
||||||
|
# Do patch on the grpc-java
|
||||||
|
#rm ~/.m2/repository/io/grpc/grpc-netty-shaded/1.38.0/grpc-netty-shaded-1.38.0.jar
|
||||||
|
#mvn install:install-file -Dfile=grpc-netty-shaded-build/grpc-netty-shaded-1.38.0.jar -DgroupId=io.grpc -DartifactId=grpc-netty-shaded -Dversion=1.38.0 -Dpackaging=jar
|
||||||
|
|
||||||
|
# Compile if the source code is changed
|
||||||
|
mvn compile
|
||||||
|
|
||||||
|
# Run the method
|
||||||
|
mvn exec:java \
|
||||||
|
-Dexec.cleanupDaemonThreads=false \
|
||||||
|
-Dexec.mainClass="sample.Sample"
|
|
@ -0,0 +1,122 @@
|
||||||
|
{
|
||||||
|
"name": "basic-network",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"client": {
|
||||||
|
"organization": "Org1",
|
||||||
|
"connection": {
|
||||||
|
"timeout": {
|
||||||
|
"peer": {
|
||||||
|
"endorser": "300"
|
||||||
|
},
|
||||||
|
"orderer": "300"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"channels": {
|
||||||
|
"mychannel": {
|
||||||
|
"orderers": [
|
||||||
|
"orderer0.example.com"
|
||||||
|
],
|
||||||
|
"peers": {
|
||||||
|
"peer0.org1.example.com": {
|
||||||
|
"endorsingPeer": true,
|
||||||
|
"chaincodeQuery": true,
|
||||||
|
"ledgerQuery": true,
|
||||||
|
"eventSource": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"organizations": {
|
||||||
|
"Org1": {
|
||||||
|
"mspid": "Org1MSP",
|
||||||
|
"peers": [
|
||||||
|
"peer0.org1.example.com"
|
||||||
|
],
|
||||||
|
"certificateAuthorities": [
|
||||||
|
"ca-org1"
|
||||||
|
],
|
||||||
|
"adminPrivateKeyPEM": {
|
||||||
|
"path": "/opt/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/priv_sk"
|
||||||
|
},
|
||||||
|
"signedCertPEM": {
|
||||||
|
"path": "/opt/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"orderers": {
|
||||||
|
"orderer0.example.com": {
|
||||||
|
"url": "grpcs://orderer0.example.com:7050",
|
||||||
|
"mspid": "OrdererMSP",
|
||||||
|
"grpcOptions": {
|
||||||
|
"ssl-target-name-override": "orderer0.example.com",
|
||||||
|
"hostnameOverride": "orderer0.example.com"
|
||||||
|
},
|
||||||
|
"tlsCACerts": {
|
||||||
|
"path": "/opt/crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/tls/ca.crt"
|
||||||
|
},
|
||||||
|
"adminPrivateKeyPEM": {
|
||||||
|
"path": "/opt/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/priv_sk"
|
||||||
|
},
|
||||||
|
"signedCertPEM": {
|
||||||
|
"path": "/opt/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/signcerts/Admin@example.com-cert.pem"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"peers": {
|
||||||
|
"peer0.org1.example.com": {
|
||||||
|
"url": "grpcs://peer0.org1.example.com:7051",
|
||||||
|
"grpcOptions": {
|
||||||
|
"ssl-target-name-override": "peer0.org1.example.com",
|
||||||
|
"hostnameOverride": "peer0.org1.example.com",
|
||||||
|
"request-timeout": 120001
|
||||||
|
},
|
||||||
|
"tlsCACerts": {
|
||||||
|
"path": "/opt/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"peer0.org2.example.com": {
|
||||||
|
"url": "grpcs://peer0.org2.example.com:7051",
|
||||||
|
"grpcOptions": {
|
||||||
|
"ssl-target-name-override": "peer0.org2.example.com",
|
||||||
|
"hostnameOverride": "peer0.org2.example.com",
|
||||||
|
"request-timeout": 120001
|
||||||
|
},
|
||||||
|
"tlsCACerts": {
|
||||||
|
"path": "/opt/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"certificateAuthorities": {
|
||||||
|
"ca-org1": {
|
||||||
|
"url": "https://localhost:7054",
|
||||||
|
"grpcOptions": {
|
||||||
|
"verify": true
|
||||||
|
},
|
||||||
|
"tlsCACerts": {
|
||||||
|
"path": "/opt/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem"
|
||||||
|
},
|
||||||
|
"registrar": [
|
||||||
|
{
|
||||||
|
"enrollId": "admin",
|
||||||
|
"enrollSecret": "adminpw"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ca-org2": {
|
||||||
|
"url": "https://localhost:8054",
|
||||||
|
"grpcOptions": {
|
||||||
|
"verify": true
|
||||||
|
},
|
||||||
|
"tlsCACerts": {
|
||||||
|
"path": "/opt/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem"
|
||||||
|
},
|
||||||
|
"registrar": [
|
||||||
|
{
|
||||||
|
"enrollId": "admin",
|
||||||
|
"enrollSecret": "adminpw"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,86 @@
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>sample</groupId>
|
||||||
|
<artifactId>sample</artifactId>
|
||||||
|
<version>1.0.0</version>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.8.0</version>
|
||||||
|
<configuration>
|
||||||
|
<source>1.8</source>
|
||||||
|
<target>1.8</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<version>3.2.0</version>
|
||||||
|
<executions>
|
||||||
|
<!-- Attach the shade goal into the package phase -->
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<createDependencyReducedPom>false</createDependencyReducedPom>
|
||||||
|
<filters>
|
||||||
|
<filter>
|
||||||
|
<artifact>*:*</artifact>
|
||||||
|
<excludes>
|
||||||
|
<exclude>META-INF/*.SF</exclude>
|
||||||
|
<exclude>META-INF/*.DSA</exclude>
|
||||||
|
<exclude>META-INF/*.RSA</exclude>
|
||||||
|
</excludes>
|
||||||
|
</filter>
|
||||||
|
</filters>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>oss-sonatype</id>
|
||||||
|
<name>OSS Sonatype</name>
|
||||||
|
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.hyperledger.fabric</groupId>
|
||||||
|
<artifactId>fabric-gateway-java</artifactId>
|
||||||
|
<version>2.2.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.platform</groupId>
|
||||||
|
<artifactId>junit-platform-launcher</artifactId>
|
||||||
|
<version>1.4.2</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-engine</artifactId>
|
||||||
|
<version>5.4.1</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.vintage</groupId>
|
||||||
|
<artifactId>junit-vintage-engine</artifactId>
|
||||||
|
<version>5.4.2</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.assertj</groupId>
|
||||||
|
<artifactId>assertj-core</artifactId>
|
||||||
|
<version>3.12.2</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
package sample;
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
public class Sample {
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
String connectProfilePath="connection.json";
|
||||||
|
String channelName="businesschannel";
|
||||||
|
String walletPath="/opt/test/wallet";
|
||||||
|
|
||||||
|
String chaincodeName="exp02";
|
||||||
|
|
||||||
|
// Load an existing wallet holding identities used to access the network.
|
||||||
|
Path walletDirectory = Paths.get(walletPath);
|
||||||
|
Wallet wallet = Wallets.newFileSystemWallet(walletDirectory);
|
||||||
|
|
||||||
|
// Path to a common connection profile describing the network.
|
||||||
|
Path networkConfigFile = Paths.get(connectProfilePath);
|
||||||
|
|
||||||
|
// Configure the gateway connection used to access the network.
|
||||||
|
Gateway.Builder builder = Gateway.createBuilder()
|
||||||
|
.identity(wallet, "admin")
|
||||||
|
.networkConfig(networkConfigFile);
|
||||||
|
|
||||||
|
// Create a gateway connection
|
||||||
|
try (Gateway gateway = builder.connect()) {
|
||||||
|
|
||||||
|
// Obtain a smart contract deployed on the network.
|
||||||
|
Network network = gateway.getNetwork(channelName);
|
||||||
|
Contract contract = network.getContract(chaincodeName);
|
||||||
|
|
||||||
|
// Submit transactions that store state to the ledger.
|
||||||
|
byte[] createCarResult = contract.createTransaction("invoke")
|
||||||
|
.submit( "a", "b", "10");
|
||||||
|
System.out.println(new String(createCarResult, StandardCharsets.UTF_8));
|
||||||
|
|
||||||
|
// Evaluate transactions that query state from the ledger.
|
||||||
|
byte[] queryAllCarsResult = contract.evaluateTransaction("query", "a");
|
||||||
|
System.out.println(new String(queryAllCarsResult, StandardCharsets.UTF_8));
|
||||||
|
|
||||||
|
} catch (ContractException | TimeoutException | InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue