3. Java SDK 接入指南¶
3.2. 引入SDK¶
1 2 3 4 5 | <dependency>
<groupId>com.baidu.xuper</groupId>
<artifactId>xuper-java-sdk</artifactId>
<version>0.3.0</version>
</dependency>
|
3.3. 加载私钥¶
1 | Account account = Account.getAccountFromFile("yourPrivateKeyFile", "yourPassword");
|
3.4. 修改配置文件¶
连接开放网络时需要指定 Java SDK 需要使用的配置文件。
配置文件中的内容如下(在 Java sdk 的 /src/main/java/com/baidu/xuper/conf 目录下已经有此文件模板),连接开放网络必须开启背书服务,进行如下配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # endorseService Info
endorseServiceHost: "39.156.69.83:37100"
complianceCheck:
# 是否需要进行合规性背书
isNeedComplianceCheck: true
# 是否需要支付合规性背书费用
isNeedComplianceCheckFee: true
# 合规性背书费用
complianceCheckEndorseServiceFee: 400
# 支付合规性背书费用的收款地址
complianceCheckEndorseServiceFeeAddr: aB2hpHnTBDxko3UoP2BpBZRujwhdcAFoT
# 如果通过合规性检查,签发认证签名的地址
complianceCheckEndorseServiceAddr: jknGxa6eyum1JrATWvSJKW3thJ9GKHA9n
#创建平行链所需要的最低费用
minNewChainAmount: "100"
crypto: "xchain"
txVersion: 3
|
3.5. 连接开放网络¶
1 2 | Config.setConfigPath("./conf/sdk.yaml");
XuperClient client = new XuperClient("39.156.69.83:37100");
|
3.6. 部署合约¶
注解
开放网络目前仅支持部署EVM合约与c++ wasm合约。
本文测试采用EVM counter 合约作为示例,合约内容见:Counter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Account account = Account.getAccountFromFile("开放网络私钥目录","安全码");
Config.setConfigPath("./conf/sdk.yaml");
// 开放网络工作台注册的合约账户
String contractAccount = "";
account.setContractAccount(contractAccount);
XuperClient client = new XuperClient("39.156.69.83:37100");
try {
// 合约编译文件
byte[] abi = Files.readAllBytes(Paths.get("./build/Counter.abi"));
byte[] bin = Files.readAllBytes(Paths.get("./build/Counter.bin"));
Map<String,String> params = new HashMap<>();
params.put("creator", contractAccount);
Transaction tx = client.deployEVMContract(account,bin,abi,"Counter", params);
System.out.println(tx.getContractResponse().getBodyStr());
} catch (IOException e) {
e.printStackTrace();
}
|
3.7. 调用合约¶
注解
如果合约方法修改了链上数据,如Counter合约的increase方法,请使用 invokeEVMContract()
如果合约方法仅做查询,如Counter合约的get方法,请使用 queryEVMContract()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Account account = Account.getAccountFromFile("开放网络私钥目录","安全码");
Config.setConfigPath("./conf/sdk.yaml");
String contractAccount = "";
//// 在调用合约时,如果 SetContractAccount,那么此次调用的发起者为合约账户。即:msg.sender 为合约账户转换后的EVM地址。
account.setContractAccount(contractAccount);
String contractName = "Counter";
String contractMethod = "increase";
XuperClient client = new XuperClient("39.156.69.83:37100");
Map<String,String> params = new HashMap<>();
params.put("key", "xuperos");
// 开放网络不允许转账,所以在调用合约时 amount 参数要给0
Transaction tx = client.invokeEVMContract(account,contractName, contractMethod, params, BigInteger.ZERO);
System.out.println(tx.getContractResponse().getBodyStr());
|
具体接口文档参考 Java SDK 使用文档 。