Go Chaincode Support for Fabric Private Chaincode
Note - Go Chaincode support is currently under development and should be considered experimental.
Overview
This directory contains the components to enable Go Chaincode support for Fabric Private Chaincode (FPC).
This feature relies on the Ego project to build and execute go application with Intel SGX.
In particular, it contains:
- FPC Go Library to be used with your Go Chaincode.
- Building and packaging utilities
FPC Go Library
We aim to support Go Chaincode without the need to refactor existing code but still benefit from the security properties added by FPC.
However, we currently support only a limited Chaincode API with common functionality to enable a broad set of applications.
We refer to shim.go for the full list of supported functions.
Note that calling unsupported shim functions, currently results in a panic.
To use FPC, you simply need to wrap your chaincode with the FPC Go Library. Here an example:
package main
import (
"github.com/hyperledger/fabric-chaincode-go/shim"
fpc "github.com/hyperledger/fabric-private-chaincode/ecc_go/chaincode"
"github.com/your-project/project/chaincode"
)
func main() {
...
// create private chaincode
privateChaincode := fpc.NewPrivateChaincode(&chaincode.YourChaincode{})
// start chaincode as a service
server := &shim.ChaincodeServer{
CC: privateChaincode,
}
if err := server.Start(); err != nil {
panic(err)
}
}
Building and packaging
In contrast to traditional Fabric Go Chaincode, FPC uses the ego compiler to build the chaincode and then package it in a docker image.
To simplify this process, we provide you a Dockerfile and a build.mk which you can use in your project.
Here an example of a Makefile:
include $(FPC_PATH)/ecc_go/build.mk
CC_NAME ?= your-chaincode-name
Your make file now comes with standard build targets, such as, build, test, and clean.
See build.mk for a full list of available build targets.
Installation
Install Ego inside dev environment
This installation assumes a working FPC dev environment.
You can find all setup information in the getting started section of our README.md.
If you are not using the FPC dev docker container, you need to install the ego compiler manually.
Install ego by running the following:
wget -qO- https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | apt-key add
add-apt-repository "deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu `lsb_release -cs` main"
wget https://github.com/edgelesssys/ego/releases/download/v1.8.1/ego_1.8.1_amd64_ubuntu-22.04.deb
apt install ./ego_1.8.1_amd64_ubuntu-22.04.deb build-essential libssl-dev
You can find more information about ego installation on the official documentation.
Examples
So see FPC Go Chaincode Support in action, we provide a few examples in our repository.
Simple Asset Tutorial
We provide a quick getting started tutorial that walks you through the process to write, build, deploy, and run FPC Go Chaincode.
You can find the tutorial in samples/chaincode/simple-asset-go.
Auction
We provide a sample auction samples/chaincode/auction-go.
You can run it using the integration test suite as follows:
cd $FPC_PATH/integration/go_chaincode/auction
make
KV-Test
Another example is provided samples/chaincode/kv-test-go.
You can run it using the integration test suite as follows:
cd $FPC_PATH/integration/go_chaincode/kv_test/
make
Developer notes
Here provide a collection of useful developer notes which may help you while developing.
Kill hanging containers
docker kill $(docker ps -a -q --filter ancestor=fpc/ercc --filter ancestor=fpc/auction-go)
docker rm $(docker ps -a -q --filter ancestor=fpc/ercc --filter ancestor=fpc/auction-go)
More to come ...
TODOs
The following components are not yet implemented.