3. Java SDK 接入指南

3.1. 下载私钥

在开放网络上创建账户后,会为用户生成加密的私钥,使用时需要使用密码解密后才可使用。

登录到开放网络后,通过控制台可以下载个人账户的私钥文件

../_images/xuperos-private-key-dl.png

3.2. 引入SDK

  1. <dependency>
  2. <groupId>com.baidu.xuper</groupId>
  3. <artifactId>xuper-java-sdk</artifactId>
  4. <version>0.3.0</version>
  5. </dependency>

3.3. 加载私钥

  1. Account account = Account.getAccountFromFile(“yourPrivateKeyFile”, yourPassword”);

3.4. 修改配置文件

连接开放网络时需要指定 Java SDK 需要使用的配置文件。

配置文件中的内容如下(在 Java sdk 的 /src/main/java/com/baidu/xuper/conf 目录下已经有此文件模板),连接开放网络必须开启背书服务,进行如下配置:

  1. # endorseService Info
  2. endorseServiceHost: 39.156.69.83:37100
  3. complianceCheck:
  4. # 是否需要进行合规性背书
  5. isNeedComplianceCheck: true
  6. # 是否需要支付合规性背书费用
  7. isNeedComplianceCheckFee: true
  8. # 合规性背书费用
  9. complianceCheckEndorseServiceFee: 400
  10. # 支付合规性背书费用的收款地址
  11. complianceCheckEndorseServiceFeeAddr: aB2hpHnTBDxko3UoP2BpBZRujwhdcAFoT
  12. # 如果通过合规性检查,签发认证签名的地址
  13. complianceCheckEndorseServiceAddr: jknGxa6eyum1JrATWvSJKW3thJ9GKHA9n
  14. #创建平行链所需要的最低费用
  15. minNewChainAmount: 100
  16. crypto: xchain
  17. txVersion: 3

3.5. 连接开放网络

  1. Config.setConfigPath(“./conf/sdk.yaml”);
  2. XuperClient client = new XuperClient(“39.156.69.83:37100”);

3.6. 部署合约

注解

  • 开放网络目前仅支持部署EVM合约与c++ wasm合约。

  • 本文测试采用EVM counter 合约作为示例,合约内容见:Counter

  1. Account account = Account.getAccountFromFile(“开放网络私钥目录”,”安全码”);
  2. Config.setConfigPath(“./conf/sdk.yaml”);
  3. // 开放网络工作台注册的合约账户
  4. String contractAccount = “”;
  5. account.setContractAccount(contractAccount);
  6. XuperClient client = new XuperClient(“39.156.69.83:37100”);
  7. try {
  8. // 合约编译文件
  9. byte[] abi = Files.readAllBytes(Paths.get(“./build/Counter.abi”));
  10. byte[] bin = Files.readAllBytes(Paths.get(“./build/Counter.bin”));
  11. Map<String,String> params = new HashMap<>();
  12. params.put(“creator”, contractAccount);
  13. Transaction tx = client.deployEVMContract(account,bin,abi,”Counter”, params);
  14. System.out.println(tx.getContractResponse().getBodyStr());
  15. } catch (IOException e) {
  16. e.printStackTrace();
  17. }

3.7. 调用合约

注解

  • 如果合约方法修改了链上数据,如Counter合约的increase方法,请使用 invokeEVMContract()

  • 如果合约方法仅做查询,如Counter合约的get方法,请使用 queryEVMContract()

  1. Account account = Account.getAccountFromFile(“开放网络私钥目录”,”安全码”);
  2. Config.setConfigPath(“./conf/sdk.yaml”);
  3. String contractAccount = “”;
  4. //// 在调用合约时,如果 SetContractAccount,那么此次调用的发起者为合约账户。即:msg.sender 为合约账户转换后的EVM地址。
  5. account.setContractAccount(contractAccount);
  6. String contractName = Counter”;
  7. String contractMethod = increase”;
  8. XuperClient client = new XuperClient(“39.156.69.83:37100”);
  9. Map<String,String> params = new HashMap<>();
  10. params.put(“key”, xuperos”);
  11. // 开放网络不允许转账,所以在调用合约时 amount 参数要给0
  12. Transaction tx = client.invokeEVMContract(account,contractName, contractMethod, params, BigInteger.ZERO);
  13. System.out.println(tx.getContractResponse().getBodyStr());

具体接口文档参考 `Java SDK 使用文档 <../development_manuals/xuper-sdk/xuper-sdk-java.html>>`_