在Webase平台上部署好智能合约,并检查能够正常发交易实现增删查改后,我们还需要使其能够与java交互来实现一个可用于应用的系统。在项目中,我们需要新建四个文件夹,一个用于存放java类型文件,一个用来存放abi文件,一个用来存放bin文件,一个用来存放证书文件。本文使用的是maven方法!,文件夹名最好就按图中的来!
一.智能合约编译与虚拟机文件导入
首先将我们的合约进行编译。
bash sol2java.sh -p org.fisco.bcos.asset.contract
然后从虚拟机导入我们需要的文件(用mobaxterm实现主机与虚拟机之间的连接,如果permission denied检查是否在有权限的文件夹下,,可以通过chmod 777 text修改文件权限以下载!)
java文件、bin文件、编译好的abi文件一般在 fisco/console/contracts/sdk文件夹下。
证书文件在webase-deploy/nodes/127.0.0.1/sdk文件夹下。
将java文件移到fisco文件夹下
将abi文件移到我们新建的abi文件夹下
将bin文件移到我们新建的bin文件夹下
将证书文件移到我们新建的config 文件夹下
移动完之后的项目文件
检查java文件,将包名改为自己的包名。
发现仍有很多报错,原因是我们还没有注入fisco的依赖,这里演示如何在maven文件注入fisco依赖,注意这篇文章讲的不是gradle文件还是maven文件!
在pom.xml下注入以下依赖。如果报错则等待一会,注入后刷新。
<dependency>
<groupId>org.fisco-bcos.java-sdk</groupId>
<artifactId>fisco-bcos-java-sdk</artifactId>
<version>2.9.1</version>
</dependency>
报错解决
二.创建配置文件
首先,在idea中新建config-example.toml文件,注意位置需与applictions.properties同级!
在config-example.toml文件中写入以下内容:
[cryptoMaterial]
certPath = "conf" # The certification path
# The following configurations take the certPath by default if commented
# caCert = "conf/ca.crt" # CA cert file path
# If connect to the GM node, default CA cert path is ${certPath}/gm/gmca.crt
# sslCert = "conf/sdk.crt" # SSL cert file path
# If connect to the GM node, the default SDK cert path is ${certPath}/gm/gmsdk.crt
# sslKey = "conf/sdk.key" # SSL key file path
# If connect to the GM node, the default SDK privateKey path is ${certPath}/gm/gmsdk.key
# enSslCert = "conf/gm/gmensdk.crt" # GM encryption cert file path
# default load the GM SSL encryption cert from ${certPath}/gm/gmensdk.crt
# enSslKey = "conf/gm/gmensdk.key" # GM ssl cert file path
# default load the GM SSL encryption privateKey from ${certPath}/gm/gmensdk.key
[network]
peers=["127.0.0.1:20200", "127.0.0.1:20201"] # The peer list to connect
# AMOP configuration
# You can use following two methods to configure as a private topic message sender or subscriber.
# Usually, the public key and private key is generated by subscriber.
# Message sender receive public key from topic subscriber then make configuration.
# But, please do not config as both the message sender and the subscriber of one private topic, or you may send the message to yourself.
# Configure a private topic as a topic message sender.
# [[amop]]
# topicName = "PrivateTopic"
# publicKeys = [ "conf/amop/consumer_public_key_1.pem" ] # Public keys of the nodes that you want to send AMOP message of this topic to.
# Configure a private topic as a topic subscriber.
# [[amop]]
# topicName = "PrivateTopic"
# privateKey = "conf/amop/consumer_private_key.p12" # Your private key that used to subscriber verification.
# password = "123456"
[account]
keyStoreDir = "account" # The directory to load/store the account file, default is "account"
# accountFilePath = "" # The account file path (default load from the path specified by the keyStoreDir)
accountFileFormat = "pem" # The storage format of account file (Default is "pem", "p12" as an option)
# accountAddress = "" # The transactions sending account address
# Default is a randomly generated account
# The randomly generated account is stored in the path specified by the keyStoreDir
# password = "" # The password used to load the account file
[threadPool]
# channelProcessorThreadSize = "16" # The size of the thread pool to process channel callback
# Default is the number of cpu cores
# receiptProcessorThreadSize = "16" # The size of the thread pool to process transaction receipt notification
# Default is the number of cpu cores
maxBlockingQueueSize = "102400" # The max blocking queue size of the thread pool
找到,将其中的ip地址改为虚拟机中的地址,配置文件修改完成。
三.调用测试类检查功能
在idea中创建测试类。获取配置文件路径。
public final String configFile = "src/main/resources/config-example.toml";
初始准备工作:
三.1 初始化SDK
// 初始化BcosSDK对象
BcosSDK sdk = BcosSDK.build(configFile);
// 获取Client对象,此处传入的群组ID为1
Client client = sdk.getClient(Integer.valueOf(1));
// 构造AssembleTransactionProcessor对象,需要传入client对象,CryptoKeyPair对象和abi、
binary文件存放的路径。abi和binary文件需要在上一步复制到定义的文件夹中。
CryptoKeyPair keyPair = client.getCryptoSuite().createKeyPair();
三.2 初始化配置对象
AssembleTransactionProcessor transactionProcessor = TransactionProcessorFactory.createAssembleTransactionProcessor(client, keyPair, "src/main/resources/abi/", "");
三.3 进行交易测试
这里,交易测试以其中一个为例,其它交易操作步骤与例子相同。
准备函数所需要的参数:
String keyword="2";
String date="0721";
String patient_name="xiaoming";
String sex = "nan";
String age="18";
String doctor_name="xiaohong";
String diagnosis="ganmao";
创建参数列表并写入参数
List<Object> params = new ArrayList<>();
params.add(keyword);
params.add(date);
params.add(patient_name);
params.add(sex);
params.add(age);
params.add(date);
params.add(doctor_name);
params.add(diagnosis);
调用合约:
TransactionResponse transactionResponse = transactionProcessor.sendTransactionAndGetResponseByContractLoader("HelloWorld", helloWorldAddrss, "set", params);
其中,调用合约时的第一个参数为自己编写的智能合约的名字,第二个参数为合约地址,第三个参数为所使用的自己编写的智能合约中的函数,第四个参数为刚刚创建的params参数数组。
合约地址可以在Webase平台中的合约列表找到:
,如果有返回值还需要打印返回值。
版权归原作者 珞笔寻依 所有, 如有侵权,请联系我们删除。