0


Webase平台与java交互

    在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平台中的合约列表找到:

,如果有返回值还需要打印返回值。


本文转载自: https://blog.csdn.net/qazxsw986918/article/details/140572578
版权归原作者 珞笔寻依 所有, 如有侵权,请联系我们删除。

“Webase平台与java交互”的评论:

还没有评论