环境接口

环境初始化接口 init 用于初始化环境配置。

函数原型

public boolean init(final ClientEnv env)

请求参数

参数

必选

类型

说明

env

true

ClientEnv

SDK内部运行环境参数设置

ClientEnv

ClientEnv,具体参数见下表。

参数

必选

类型

说明

signerOption

true

SignerOption

签名配置

sslOption

true

ISslOption

SSL连接配置

networkOption

false

NetworkOption

网络配置

requestOption

false

RequestOption

请求配置

SignerOption,具体参数见下表。

参数

必选

类型

说明

signers

true

List<SignerBase>

签名集合

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<InetSocketAddress>

链IP集合

codecType

false

CodecType

编码类型:

  • RLP

  • JSON

networkType

false

NetworkType

网络连接类型:

  • TLS

  • HTTPS

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

链路优选配置参数项

OptimalNetworkLinkOption,具体参数见下表。

参数

必选

类型

说明

enable

true

Boolean

是否开启,默认不开启。

  • true:开启

  • false:不开启

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。