The compilation process takes in input only one file (many other files can be included through the #include prepocessor directive) and gives in output a JSON Object (called Output JSON Object) containing all requested information that can be provided. The entire process is composed by a set of phases, executed in a sequence and everyone of which produces an output for each contract compiled. Starting phase can be eventually specified by Compilation options. If during the execution of a phase an error is generated, the process stops at the end of that phase and no output for that phase is provided (obviously no output for subsequent phases is provided neither).

Compilation phases

Here is the list of all phases, in the order they are executed. The input of the first executed phase is the content of the file provided in input to the whole process, while for all subsequent phases the output of previously executed phase is used as input.


Runs the CCC preprocessor. Both input format and output format are CCC.


Runs the CCC compiler. This phase produces two outputs: the abi and the assembly representation of the compiled contract(s) which is eventually used as input for next phase. The expected input format is CCC.


Runs the CCC assembler which provides the opcode representation of the contract(s). Both input format and output format are assembly.


Translates the assembly in the opcodes: Basically it resolves the assembly labels in their realtive or absolute address.


Literally translates the opcodes in the hexadecimal representation of the bytecode of the contract(s), ready to be deployed on blockchain.

Output JSON Object

This is a JSON Object with four keys. Follows an example.

    "contracts": {
        "FirstContract": {
            "abi": [...],
            "assembly": [...],
            "bin": [...],
            "preprocessed": [...],
            "opcodes": [...]
    "errors": [],
    "messages": [],
    "warnings": []


This is a JSON Object where the keys are the names of all compiled contracts and the values are the output of all phase run during the compilation process.


The array of all encoutered errors, eventually the empty array [].


The array of all generated messages, eventually the empty array []. This is merely the merge of all errors and warnings.


The array of all encoutered warnings, eventually the empty array [].

Compilation options

Some options may conflict due to the fact some one of them specify the input format of the file or they define conflicting starting and ending phase.


Boolean - If true specifies that input format is in assembly and starting phase is Assemble.


Boolean - If true includes the generated assembly in the output, specifies that input format is in CCC and starting phase is Compile.


Object - Specifies a set of predefined #define macros. Each key is the name of the macro and relative value is the value of the macro. The values must be of type String, eventually the empty string "".


Boolean - If true includes the generated opcode in the output.


Boolean - If true includes the preprocessor result in the output, specifies that input format is in CCC.