学习资源来自于官方文档:
https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/tutorial/sdk_application.html。
有也在学习FISCO框架的欢迎一起交流学习
通过这个应用我们可以学习到
文章目录
1如何将一个业务场景的逻辑用合约的形式表达
我们首先分析我们的业务需求
按照业务的设计目标,需要实现资产注册,转账,查询功能
,对应功能的接口如下:
我们把account用户的账户作为唯一主键。
// 查询资产金额
function select(string account) public constant returns(int256, uint256)
// 资产注册
function register(string account, uint256 amount) public returns(int256)
// 资产转移
function transfer(string from_asset_account, string to_asset_account, uint256 amount) public returns(int256)
完整源码参照官方文档。需要注意的是Asset.sol
合约的实现需要引入FISCO BCOS提供的一个系统合约接口文件 Table.sol
,该系统合约文件中的接口由FISCO BCOS底层实现。当业务合约需要操作CRUD接口时,均需要引入该接口合约文件
。关于Table.sol我们最后会再介绍一下。
2如何将Solidity合约转化成Java类
我们根据业务需求设计了合约Asset.sol的存储与接口,给出了完整实现,但是Java程序无法直接调用Solidity合约,需要先将Solidity合约文件编译为Java文件。
控制台提供了编译工具,可以将Asset.sol合约文件存放在console/contracts/solidity目录。利用console目录下提供的sol2java.sh脚本进行编译,操作如下
# 切换到fisco/console/目录
cd ~/fisco/console/
# 编译合约,后面指定一个Java的包名参数,可以根据实际项目路径指定包名
./sol2java.sh org.fisco.bcos.asset.contract
运行成功之后,将会在console/contracts/sdk目录生成java、abi和bin目录
3如何配置Web3SDK
项目引入Web3SDK
项目的build.gradle文件已引入Web3SDK,不需修改。其引入方法介绍如下:
Web3SDK引入了以太坊的solidity编译器相关jar包,因此在build.gradle文件需要添加以太坊的远程仓库:
repositories {
maven {
url "http://maven.aliyun.com/nexus/content/groups/public/"
}
maven { url "https://dl.bintray.com/ethereum/maven/" }
mavenCentral()
}
拷贝区块链节点对应的SDK证书。节点证书看上一节博客FISCO基础篇
# 进入~目录
# 拷贝节点证书到项目的资源目录
$ cd ~
$ cp fisco/nodes/127.0.0.1/sdk/* asset-app/src/test/resources/
4如何构建一个应用,并集成Web3SDK到应用工程
引入Web3SDK jar包
compile ('org.fisco-bcos:web3sdk:2.5.0')
5.关于Table.sol
更具体内容参照官方文档
Table合约声明于Table.sol,该接口是数据库合约,可以创建表,并对表进行增删改查操作。
为实现AMDB创建的表可被多个合约共享访问,其表名是群组内全局可见且唯一的,所以无法在同一条链上的同一个群组中,创建多个表名相同的表。
Table的CRUD接口一个key下可以有多条记录,使用时会进行数据批量操作,包括批量写入和范围查询。对应此特性,推荐使用关系型数据库MySQL作为后端数据库。
使用KVTtable的get/set接口时,推荐使用RocksDB作为后端数据库,因RocksDB是Key-Value存储的非关系型数据库,使用KVTable接口时单key操作效率更高。
完整流程
官方有给我们提供完整源码:具体实现过程如下
1.获取java工程项目
# 获取Java工程项目压缩包
cd ~
curl -#LO https://github.com/FISCO-BCOS/LargeFiles/raw/master/tools/asset-app.tar.gz
# 解压得到Java工程项目asset-app目录
tar -zxf asset-app.tar.gz
2.编译运行
# 切换到项目目录
cd ~/asset-app
# 编译项目
./gradlew build
3.部署Asset.sol合约
# 进入dist目录
cd dist
bash asset_run.sh deploy
部署成功后会返回Deploy Asset successfully, contract address is 合约地址
4调用合约方法——注册资产,查询资产,转移资产
注册资产
bash asset_run.sh register Alice 100000
bash asset_run.sh register Bob 100000
查询资产
bash asset_run.sh query Alice
转移资产
bash asset_run.sh transfer Alice Bob 50000