一个基于 Fabric Sample 中test-network
网络及相关工具搭建的 Fabric Chaincode / Application 开发测试用项目框架,项目语言采用 Java 11。此项目不适用于生产目的。
项目采用 Gradle 多模块框架,集成了 Chaincode 的远程部署,并支持在本地运行或测试 Application。
项目基于 Gradle Plugin + JavaPoet 实现了合约 API 定义的自动生成,通过同一份配置为 Chaincode 和 Application 分别生成各自适用的 Java 代码文件。
运行项目前,需要在 Linux 服务器上部署Fabric环境。
如不使用虚拟机,跳过这一部分。
- 安装 Oracle VM VirtualBox ;
- 安装系统镜像 Ubuntu-24.10-live-server-amd64;
- 配置NAT与Host-Only双网卡实现宿主机与虚拟机间的双向访问;
- (根据所处网络环境)配置虚拟机允许其使用宿主机代理访问互联网,勾选“自动检测主机代理设置即可”;
用于访问Apt源、Docker镜像和Github。
这一部分中,安装Fabric Sample的所需环境,并下载安装Sample。
这一部分中应当始终启用代理网络。
下面的代码将把 Fabric 的相关程序安装在 ~/fabric
目录下。
# this script is used to configure fabric sample.
# configure proxy before use this script and use `sudo` to grant root access.
# execute script at a directory where to install fabric sample
cd ~
mkdir fabric
cd ./fabric
# configure fabric prerequisites: git, curl, docker and openjdk-11
sudo apt-get install git curl docker-compose openjdk-11-jdk -y
# Make sure the Docker daemon is running.
sudo systemctl start docker
# Add user to the Docker group.
sudo usermod -a -G docker "$USER"
# Check version numbers
# docker --version
# docker-compose --version
# enable auto start docker service when rebooting machine
sudo systemctl enable docker
# configure docker mirror sites
# sudo echo -e "{\n\t\"registry-mirrors\": [\n\t\t\"https://dockerpull.com\",\n\t\t\"https://docker.1panel.dev\",\n\t\t\"https://docker.fxxk.dedyn.io\",\n\t\t\"https://docker.zhai.cm\",\n\t\t\"https://hub.geekery.cn\",\n\t\t\"https://a.ussh.net\",\n\t\t\"https://atomhub.openatom.cn\",\n\t\t\"https://docker.m.daocloud.io\",\n\t\t\"https://docker.xn--6oq72ry9d5zx.cn\"\n\t]\n}" > /etc/docker/daemon.json
######################
# download installer shell script file
curl -sSLO https://raw.githubusercontent.com/hyperledger/fabric/main/scripts/install-fabric.sh && chmod +x install-fabric.sh
# download docker mirror, sample and cli binary
./install-fabric.sh docker samples binary
略,详见Fabric官方文档。
在虚拟机上执行下面的命令。
cd ~/fabric/fabric-samples/test-network
# clear and run test network.
./network.sh down
./network.sh up createChannel -c mychannel -ca
# compile and deploy chiancode.
./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-java/ -ccl java
# compile and run application.
cd ~/fabric/fabric-samples/asset-transfer-basic/application-gateway-java/
./gradlew build run
运行前需要修改./config.properties
文件,配置 Fabric 服务器相关项。
在本地项目目录下执行下面的指令,重置 Fabric 网络,部署 Chaincode,并运行 Application:
./gradlew chaincode:deployChaincode application:clean application:run
./gradlew chaincode:restartNetwork
依赖任务
chaincode:restartNetwork
。
./gradlew chaincode:deployChaincode
./gradlew application:clean application:run
需要提前搭建好 Fabric 服务器相关环境,详细步骤参见上文。
- 修改
./chaincodeDefinition.gradle
文件中的合约接口定义; - 执行
./gradlew chaincode:build application:build
,生成合约 API 定义代码; - 修改
./chaincode
下的源码文件,继承生成的API接口并按照Fabric Chaincode规范添加必要的注解和接口,实现具体的方法以完成合约程序; - 部署 Chaincode;
- 修改
./application
下的源码文件,根据生成的API构造对象并通过方法访问Fabric合约,以此实现具体的应用程序; - 运行 Application。