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