JAVASDK
本文基于已经搭建起来的节点使用javasdk调用去对节点进行操作,前置知识需要了解什么是ABI、什么是BIN、以及对fisco中的console中的配置文件:config。toml具有一定了解
配置环节
对sol文件进行Java文件转换(console 下的sol2java.sh*)
1.转换为java文件生成在指定目录下
console/contracts/solidity(合约所在文件夹)
bash sol2java.sh -p com.by.fisco
IDEA导入依赖
这里使用的是gradle工具
在gradle.build导入
implementation("org.fisco-bcos.java-sdk:fisco-bcos-java-sdk:2.9.1")
同时也可以使用maven
在pom.xml配置文件中导入
<groupId>org.fisco-bcos.java-sdk</groupId>
<artifactId>fisco-bcos-java-sdk</artifactId>
<version>2.9.1</version>
</dependency>
配置
Java sdk主要包括五个配置选项,
分别是
1证书配置(必须)
2网络连接配置 (必须)
3AMOP配置(非必须)
4账户配置(非必须,不配置则使用默认配置值)
5线程池配置(非必须,不配置则使用默认配置值)
第一个是
合约java文件
合约Abi和bin
合约Abi和bin放入resource目录下。
证书conf
conf目录主要是用来存放证书的,这里调用节点一定要启动,否则就会报错
config.toml文件
测试类中调用合约
public class BcosSDKTest
{
// 获取配置文件路径
public final String configFile = BcosSDKTest.class.getClassLoader().getResource("config-example.toml").getPath();
public void testClient() throws ConfigException {
// 初始化BcosSDK
BcosSDK sdk = BcosSDK.build(configFile);
// 为群组1初始化client
Client client = sdk.getClient(Integer.valueOf(1));
// 获取群组1的块高
BlockNumber blockNumber = client.getBlockNumber();
// 向群组1部署HelloWorld合约
CryptoKeyPair cryptoKeyPair = client.getCryptoSuite().getCryptoKeyPair();
HelloWorld helloWorld = HelloWorld.deploy(client, cryptoKeyPair);
// 调用HelloWorld合约的get接口
String getValue = helloWorld.get();
// 调用HelloWorld合约的set接口
TransactionReceipt receipt = helloWorld.set("Hello, fisco");
}
}
基于ABI和BIN调用合约
将此合约转换为java文件之后依据以上步骤创建一个gradle的普通java项目
当前处于初步学习阶段,暂时没有和spingboot进行整合
pragma solidity ^0.4.25;
contract HelloWorld{
string public name;
constructor() public{
name = "Hello, World!";
}
function set(string n) public{
name = n;
}
}
初始化配置对象
AssembleTransactionProcessor
通过创建使用AssembleTransactionProcessor对象完成合约相关部署调用、查询操作
参数分别是
BcosSDK=BcosSDK.build(“config.toml”)
Client对象:Client client=sdk.getClient(INteger.valueOf(1))
创建的私钥: CryptoKeyPair keyPair = client.getCryptoSuite().createKeyPair();
Abi文件、BIN文件
部署、交易、查询
AssembleTransactionProcessor transactionProcessor = TransactionProcessorFactory.createAssembleTransactionProcessor(client, keyPair, "src/main/resources/abi/", "src/main/resources/bin/");
交易、查询
AssembleTransactionProcessor transactionProcessor = TransactionProcessorFactory.createAssembleTransactionProcessor(client, keyPair, "src/main/resources/abi/", "");
测试文件编写
public class BcosTest {
public final String configFile=BcosTest.class.getClassLoader().getResource("config.toml").getPath();
@Test
public void testClient() throws Exception {
BcosSDK bcosSDK=BcosSDK.build(configFile);
Client client = bcosSDK.getClient(Integer.valueOf(1));
BlockNumber blockNumber=client.getBlockNumber();
CryptoKeyPair cryptoKeyPair=client.getCryptoSuite().getCryptoKeyPair();
AssembleTransactionProcessor assembleTransactionProcessor = TransactionProcessorFactory.createAssembleTransactionProcessor(client, cryptoKeyPair, "src/main/resources/abi/", "src/main/resources/bin/");
TransactionResponse helloWorld = assembleTransactionProcessor.deployByContractLoader("HelloWorld", new ArrayList<>());
控制台中查看块高
执行测试获得交易哈希
部署成功
发送jHelloWorldset交易以及get获取
List<Object> params=new ArrayList<>();
params.add("test");
String add="0x8365d8219136f1dc3f0f113adf3f2cfc62f837a9";
AssembleTransactionProcessor transactionResponse = TransactionProcessorFactory.createAssembleTransactionProcessor(client, cryptoKeyPair, "src/main/resources/abi/", "src/main/resources/bin/");
TransactionResponse transactionResponse1 = transactionResponse.sendTransactionAndGetResponseByContractLoader("HelloWorld", add, "set", params);
//发送set交易
System.out.println(transactionResponse);
CallResponse callResponse = transactionResponse.sendCallByContractLoader("HelloWorld", add, "get", new ArrayList<>());
//获取get
System.out.println(callResponse);