环境初始化接口 init 用于初始化环境配置。
函数原型
public boolean init(final ClientEnv env)
请求参数
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
env | true | ClientEnv | SDK内部运行环境参数设置 |
ClientEnv
ClientEnv,具体参数见下表。
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
signerOption | true |
| 签名配置 |
sslOption | true |
| SSL连接配置 |
networkOption | false |
| 网络配置 |
requestOption | false |
| 请求配置 |
SignerOption,具体参数见下表。
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
signers | true | List< | 签名集合 |
SignerBase,具体有以下四种实现类。
EccR1SignerV1
参数
类型
说明
privateKey
byte[]
私钥
publicKey
byte[]
公钥
RsaSignerV1
参数
类型
说明
privateKey
byte[]
私钥
publicKey
byte[]
公钥
privateCrtKey
RSAPrivateCrtKey
私钥crt key
rsaPublicKey
RSAPublicKey
rsa公钥
EccK1KeypairV0
参数
类型
说明
privateKey
byte[]
私钥
publicKey
byte[]
公钥
SM2SignerV1
参数
类型
说明
privateKey
byte[]
私钥
publicKey
byte[]
公钥
keypair
Keypair
公私钥对
Keypair,具体参数见下表。
参数
类型
说明
type
KeyTypeEnum
私钥
privkeyId
byte[]
私钥id
pubkeyId
byte[]
公钥id
SslOption
SslOption,具体参数见下表。
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
keyFilePath | true | String | client.key文件路径 |
certFilePath | true | String | client.crt文件路径 |
keyPassword | true | String | client.key密码 |
trustStoreFilePath | true | String | trustCa文件路径 |
trustStorePassword | true | String | trustCa文件密码 |
NetworkOption
NetworkOption,具体参数见下表。
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
socketAddressList | true | List< | 链IP集合 |
codecType | false |
| 编码类型:
|
networkType | false |
| 网络连接类型:
|
maxMessageSize | false | Integer | 支持最大消息长度,单位:B |
connectTimeoutMs | false | Integer | SDK与链建立连接发生超时的超时时间 |
heartbeatIntervalMs | false | Intege | 心跳检测超时时间 |
retryHeartbeatTimes | false | Intege | 心跳检测重试次数 |
retryConnectTimes | false | Intege | 连接建立重试次数 |
coreThreadPoolSize | false | Intege | 核心线程池的大小,会影响netty中线程池,以及处理消息线程池核心/最大线程数大小 |
threadPoolQueueSize | false | Intege | 线程池队列大小,会影响消息处理线程池队列和发送消息线程池队列大小 |
optimalNetworkLinkOption | false |
| 链路优选配置参数项 |
OptimalNetworkLinkOption,具体参数见下表。
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
enable | true | Boolean | 是否开启,默认不开启。
|
blockNumIntervalRange | false | int | 判断获取最优区块时比当前最优区块超过的区块高度范围 |
queryNodeStatusIntervalMs | false | int | 查询节点状态间隔时间,单位:ms |
RequestOption
RequestOption,具体参数见下表。
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
queryReceiptTimeoutMs | false | Integer | 查询交易收据超时时间 |
sendRequestTimeoutMs | false | iInteger | 发送消息超时时间 |
queryReceiptIntervalMs | false | Integer | 查询交易收据间隔时间 |
enableQueryTxReceipt | false | Boolean | 是否查询交易收据,默认查询 |
示例(添加多IP)
public static final String account = "test";//TODO 需要修改成自己已经创建的账户
public static Identity userIdentity;
public static Keypair userKeypair;
public static MychainClient sdk;
public static ClientEnv env;
public static String keyPassword = "test123"; //TODO 申请证书时候指定的SSL密码
public static String userPassword = "test123"; //TODO 根据实际情况更新。申请证书时,创建账户的密码
public static String trustStorePassword = "mychain";
public static String host1 = "127.0.0.1"; //根据实际情况更新,在BaaS平台,通过查看目标合约链"详情",在"浏览器"中查看"节点详情"可获取链节点的IP地址。
public static int port1 = 18130; //根据实际情况更新,在BaaS平台,通过查看目标合约链"详情",在"浏览器"中查看"节点详情"可获取链节点的端口号。
public static String host2 = "127.0.0.2"; //根据实际情况更新,在BaaS平台,通过查看目标合约链"详情",在"浏览器"中查看"节点详情"可获取链节点的IP地址。
public static int port2 = 18131; //根据实际情况更新,在BaaS平台,通过查看目标合约链"详情",在"浏览器"中查看"节点详情"可获取链节点的端口号。
public static String host3 = "127.0.0.3"; //根据实际情况更新,在BaaS平台,通过查看目标合约链"详情",在"浏览器"中查看"节点详情"可获取链节点的IP地址。
public static int port3 = 18132; //根据实际情况更新,在BaaS平台,通过查看目标合约链"详情",在"浏览器"中查看"节点详情"可获取链节点的端口号。
private static ClientEnv buildClientEnv() throws IOException {
// any user key for sign message
String userPrivateKeyFile = "user.key";
userIdentity = Utils.getIdentityByName(account);
Pkcs8KeyOperator pkcs8KeyOperator = new Pkcs8KeyOperator();
userKeypair = pkcs8KeyOperator.load(IOUtil.inputStreamToByte(DemoSample.class.getClassLoader().getResourceAsStream(userPrivateKeyFile)), userPassword);
env = buildMychainEnv();
return env;
}
public static ClientEnv buildMychainEnv() throws IOException {
String keyFilePath = "client.key";
String certFilePath = "client.crt";
String trustStoreFilePath = "trustCa";
// build ssl option
ISslOption sslOption = new SslBytesOption.Builder()
.keyBytes(IOUtil.inputStreamToByte(DemoSample.class.getClassLoader().getResourceAsStream(keyFilePath)))
.certBytes(IOUtil.inputStreamToByte(DemoSample.class.getClassLoader().getResourceAsStream(certFilePath)))
.keyPassword(keyPassword)
.trustStorePassword(trustStorePassword)
.trustStoreBytes(
IOUtil.inputStreamToByte(DemoSample.class.getClassLoader().getResourceAsStream(trustStoreFilePath)))
.build();
List<InetSocketAddress> socketAddressArrayList = new ArrayList<InetSocketAddress>();
InetSocketAddress inetSocketAddress1 = InetSocketAddress.createUnresolved(host1, port1);
InetSocketAddress inetSocketAddress2 = InetSocketAddress.createUnresolved(host2, port2);
InetSocketAddress inetSocketAddress3 = InetSocketAddress.createUnresolved(host3, port3);
socketAddressArrayList.add(inetSocketAddress1);
socketAddressArrayList.add(inetSocketAddress2);
socketAddressArrayList.add(inetSocketAddress3);
List<SignerBase> signerBaseList = new ArrayList<SignerBase>();
SignerBase signerBase = MyCrypto.getInstance().createSigner(userKeypair);
signerBaseList.add(signerBase);
SignerOption signerOption = new SignerOption();
signerOption.setSigners(signerBaseList);
return ClientEnv.build(socketAddressArrayList, sslOption, signerOption);
}
public static void main(String[] args) throws IOException {
sdk = new MychainClient();
boolean initResult = sdk.init(buildClientEnv());
System.out.println(initResult);
}
示例中,socketAddressArrayList.add(inetSocketAddress)
方法可添加多个IP。