This page aims to be a list of resources that should be helpful if you want to start contributing to CCF.
Start by reading What is CCF?.
Create an SGX VM if necessary#
If you intend to make changes that need to work on Intel SGX, you will want an SGX VM to check you didn’t introduce instructions that are illegal in enclave, and to evaluate the performance impact of your change.
Walk through a sample application#
Example app (C++) documents the sample C++ app under
/samples/apps/logging in the repo.
The logging application is simple, but exercises most features of the framework, and is extensively used in the end to end tests.
To run a locally built copy of this application in a sandbox, see Running CCF Applications. The package name will be
~/CCF/build$ ../tests/sandbox/sandbox.sh -p samples/apps/logging/liblogging
Setting up Python environment...
Python environment successfully setup
[11:44:33.376] Starting 1 CCF node...
[11:44:33.376] Virtual mode enabled
[11:44:35.025] Started CCF network with the following nodes:
[11:44:35.025] Node  = https://127.0.0.1:8000
[11:44:35.025] You can now issue business transactions to the samples/apps/logging/liblogging application
[11:44:35.025] Keys and certificates have been copied to the common folder: /home/$USER/CCF/build/workspace/sandbox_common
[11:44:35.025] See https://microsoft.github.io/CCF/main/use_apps/issue_commands.html for more information
[11:44:35.025] Press Ctrl+C to shutdown the network
Have a look at the Continuous Integration jobs#
That job gates pull requests, and is also used with a different trigger (on tags like
ccf-*) to produce releases.
Three more in-depth jobs are run every day:
Review the release and compatibility policy#
Release and compatibility policy defines what changes are possible in CCF and what timeline they must follow.
Simplified Data Flow Map#
This chart is a simplified illustration of the data flow in a running CCF service. Where possible, nodes and edges have been made links to the most relevant documentation page or file.
Note that this diagram deliberately does not represent host-to-enclave communication.
Doxygen description of the codebase is available here.