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.结束

有问题请联系!

 

posted @ 2020-08-27 10:52  州长在手  阅读(749)  评论(0编辑  收藏  举报