FISCO-BCOS Java SDK 预编译c++ 智能合约 项目源码例子gitee仓库
首先感谢FISCO社区的大佬们,感谢他们的贡献,感谢他们负责任的态度,再次感谢。
这篇文章算是这几周对FISCO-BCOS 学习的总结,其实官方文档写的已经很清楚了,我还是建议多看官方文档。
文章的主要目的是让读者快速体验FISCO预编译智能合约的开发!
首先需要一台ubuntu16.04的机器,18 和 20 不建议使用,因为某些原因可能编译不通过。16.04 是我在学习时感觉开发最流畅的。
获取ubuntu16.04系统,如果选择使用VMware,经典安装 -> next -> ubuntu64 -> ...一直 next 就好了。
系统安装的时候,下载的文件环节可以跳过,
安装好后在软件设置里换成国内镜像,我这里选择的是ustc,上面系统下载也是ustc
上面就是环境准备,现在开始搭建FISCO环境
1.安装依赖 && 安装指定版本 cmake
1.1 安装编译依赖
sudo apt install -y g++ libssl-dev openssl git build-essential autoconf texinfo flex patch bison libgmp-dev
1.2安装指定版本cmake
sudo wget http://www.cmake.org/files/v3.18/cmake-3.18.2.tar.gz tar xf cmake-3.18.2.tar.gz cd cmake-3.18.2 ./configure make sudo make install
1.3如果出错
sudo apt-get install build-essential
这样安装环境准备好了
2 编译FISCO-BCOS
cd ~
mkdir workspace && cd workspace
git clone https://gitee.com/FISCO-BCOS/LargeFiles git clone https://gitee.com/FISCO-BCOS/FISCO-BCOS.git
git clone https://gitee.com/FISCO-BCOS/console.git
先clone 三个仓库,然后用编辑器打开 编辑 FISCO-BCOS/cmake/templates/
先大概解释一下,c++ 预编译智能合约,我的理解就是可以用c++编写,大幅度提升效率,
原理就是把合约和二进制文件编译到一起,主要是在UserPrecompiled.h.in 注册进去。
也就是去掉红线部分的注释 //
cd FISCO-BCOS/cmake/templates/ gedit UserPrecompiled.h.in
cd ../../build/ git checkout master mkdir -p build && cd build cmake .. make # 高性能机器可添加-j4使用4核加速编译
2.1 如果下载速度太慢手动添加lib,注意在build目录下
cp ../../LargeFiles/libs/* ../../FISCO-BCOS/deps/src/
make -j4
3. 使用本地fsco-bcos启动单机多群组网络
cd ~/workspace && mkdir fisco
cp ../FISCO-BCOS/tools/build_chain.sh .
cp -r ../FISCO-BCOS/build/bin/ .
bash ./build_chain.sh -l "127.0.0.1:4" -e bin/fisco-bcos
./nodes/127.0.0.1/start_all.sh # 启动节点 也可以等会启动
cp ../console/tools/download_console.sh .
./download_console.sh # 开始会有一点慢,然后会自动切换国内镜像,等一会就好了
cp console/conf/applicationContext-sample.xml console/conf/applicationContext.xml
cp nodes/127.0.0.1/sdk/ca.crt ./console/conf/
cp nodes/127.0.0.1/sdk/sdk.crt ./console/conf/
cp nodes/127.0.0.1/sdk/sdk.key ./console/conf/
./console/start.sh # 然后发现还是启动不了!! 因为没有安装java!!
安装Java就不写了,copy 官方文档,这里就体现官方文档多么详细,可以把
export JAVA_HOME=/software/jdk-8u201 #这是一个文件目录,非文件
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
这几句添加到.bashrc
vi ~/ .bashrc
# 创建新的文件夹,安装Java 8或以上的版本,将下载的jdk放在software目录 # 从Oracle官网(https://www.oracle.com/technetwork/java/javase/downloads/index.html)选择Java 8或以上的版本下载,例如下载jdk-8u201-linux-x64.tar.gz $ mkdir /software # 解压jdk $ tar -zxvf jdk-8u201-linux-x64.tar.gz # 配置Java环境,编辑/etc/profile文件 $ vim /etc/profile # 打开以后将下面三句输入到文件里面并退出 export JAVA_HOME=/software/jdk-8u201 #这是一个文件目录,非文件 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar # 生效profile $ source /etc/profile # 查询Java版本,出现的版本是自己下载的版本,则安装成功。 java -version
这时候
./console/start.sh
关闭 console
3.1 现在开始编译 sol ,编译成abi bin 和java类
3.1.1 准备 sol 合约,直接官方给的
pragma solidity ^0.4.24;
contract HelloWorldPrecompiled {
function get() public constant returns(string) {}
function set(string _m) {}
}
# 确保在fisco 目录下,写入上述代码
touch ./console/contracts/solidity/HelloWorldPrecompiled.sol
gedit ./console/contracts/solidity/HelloWorldPrecompiled.sol
cd ./console
./sol2java.sh org.fisco.bcos.helloWorldPrecompile.contract
contracts/ ├── console │ ├── abi │ │ ├── HelloWorldPrecompiled.abi │ │ └── sm │ │ └── HelloWorldPrecompiled.abi │ ├── bin │ │ ├── HelloWorldPrecompiled.bin │ │ └── sm │ │ └── HelloWorldPrecompiled.bin │ └── java │ ├── classes │ │ └── temp │ │ ├── HelloWorldPrecompiled$1.class │ │ ├── HelloWorldPrecompiled$2.class │ │ └── HelloWorldPrecompiled.class │ └── temp │ └── HelloWorldPrecompiled.java ├── sdk │ ├── abi │ │ ├── HelloWorld.abi │ │ ├── HelloWorldPrecompiled.abi │ │ ├── KVTableTest.abi │ │ ├── ShaTest.abi │ │ ├── sm │ │ │ ├── HelloWorld.abi │ │ │ ├── HelloWorldPrecompiled.abi │ │ │ ├── KVTableTest.abi │ │ │ ├── ShaTest.abi │ │ │ ├── Table.abi │ │ │ └── TableTest.abi │ │ ├── Table.abi │ │ └── TableTest.abi │ ├── bin │ │ ├── HelloWorld.bin │ │ ├── HelloWorldPrecompiled.bin │ │ ├── KVTableTest.bin │ │ ├── ShaTest.bin │ │ ├── sm │ │ │ ├── HelloWorld.bin │ │ │ ├── HelloWorldPrecompiled.bin │ │ │ ├── KVTableTest.bin │ │ │ ├── ShaTest.bin │ │ │ ├── Table.bin │ │ │ └── TableTest.bin │ │ ├── Table.bin │ │ └── TableTest.bin │ └── java │ └── org │ └── fisco │ └── bcos │ ├── helloWorldPrecompile │ │ └── contract │ │ ├── HelloWorld.java │ │ ├── HelloWorldPrecompiled.java │ │ ├── KVTableTest.java │ │ ├── ShaTest.java │ │ ├── Table.java │ │ └── TableTest.java │ └── helloWorldPrecompiled │ └── contract │ ├── HelloWorld.java │ ├── HelloWorldPrecompiled.java │ ├── KVTableTest.java │ ├── ShaTest.java │ ├── Table.java │ └── TableTest.java └── solidity ├── HelloWorldPrecompiled.sol ├── HelloWorld.sol ├── KVTableTest.sol ├── ShaTest.sol ├── Table.sol └── TableTest.sol
准备好这些文件 创建一个gradle 的spring boot项目,把gradle配置为本地,上一篇介绍了。
下面就是创建 账户
curl -#LO https://gitee.com/FISCO-BCOS/console/raw/master/tools/get_account.sh && chmod u+x get_account.sh && bash get_account.sh -h
bash get_account.sh -p #创建p12 账户,sdk 需要使用
然后clone 这个项目,然后按照里面的配置把证书替换一下基本就没问题了,gradle配置为本地!!!
git clone https://gitee.com/mai12/sfisco.git
4.结束
有问题请联系!