FISCO-BCOS use libzkg to generate zero-knowledge proof for user and only governer can oversee it!
Notice: This is an experimental prototype. Do not use it in product.
Security is a basic deveping purpose of FISCO-BCOS.
- For users, they need sheild transactions and anyone else couldn't know their transaction information running on blockchain.
- For verifiers(FISCO-BCOS nodes), they need to verify all sheild transacitons, without knowing something of the shield transactions.
- For goverments, they need to oversee everything happen on blockchain even the shield transactions!
Libzkg is a zero-knowledge proof library based on FISCO-BCOS project.-
- For users, they use libzkg to generate shield transactions, nobody else can know what's inside the transactions.
- For verifiers, they can verify every shield transactions generated by libzkg without knowing something of the transactions.
- For goverments, they can decode the shield transactions on blockchain and know what's happend.
Libzkg is deveped for supporting zero-knowldge proof senarios of FISCO-BCOS.
Every senario supported by libzkg is based on this 3 principle:
- User can generate a shield transaction according with the certain senario.
- Verifier can verify the shield transaction without knowing the information of the transaction.
- Goverment can decode every shield transaction on blockchain.
- Tx1to1: Shield money transfer from one to one.
- Anonymous donation(developing)
waiting for more..
To import libzkg in your project. Cmake is recommended.
Prepare
sudo yum install -y procps-ng procps-ng-devel libgomp
Download
Download cmake file
wget https://github.com/FISCO-BCOS/FISCO-BCOS/blob/master/cmake/ProjectLibZkg.cmake
cp ProjectLibZkg.cmake your_project_dir/cmake/
CMakeLists.txt
Import in your CMakeLists.txt
vim your_project_dir/CMakeLists.txt
like
cmake_minimum_required (VERSION 3.0.0)
set(ZKG_CLIENT_CMAKE_DIR "${CMAKE_CURRENT_LIST_DIR}/cmake" CACHE PATH "The path to the cmake directory")
list(APPEND CMAKE_MODULE_PATH ${ZKG_CLIENT_CMAKE_DIR})
include(ProjectLibZkg)
find_package(OpenMP)
if(OPENMP_FOUND)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
endif()
include_directories(${LIBZKG_INCLUDE_DIR})
add_compile_options(-DMULTICORE)
add_compile_options(-std=c++11)
add_compile_options(-DCURVE_ALT_BN128)
add_compile_options(-DNO_PROCPS)
add_compile_options(-DBINARY_OUTPUT=OFF)
#aux_source_directory(. DIR_SRCS)
set(DEMO "demo")
add_executable(${DEMO} demo.cpp)
target_link_libraries(${DEMO} Zkg)
target_link_libraries(${DEMO} Zkg::circuit)
target_link_libraries(${DEMO} Zkg::snark)
target_link_libraries(${DEMO} Zkg::ff)
target_link_libraries(${DEMO} Zkg::zm)
target_link_libraries(${DEMO} gmp)
target_link_libraries(${DEMO} stdc++)
target_link_libraries(${DEMO} procps)
target_link_libraries(${DEMO} gmpxx)
target_link_libraries(${DEMO} gomp)
cpp files
Include zkg.hpp in your cpp file
#include <circuit/zkg.hpp>
Compile
mkdir build
cd build
cmake3 ..
make
#If success, libzkg.a is generated
consult with zkg.hpp and zkg-tx1to1