This will take all the code in the src and lib directories and feed it to the solc compiler. There are a few build artifacts that are deposited in the build directory, and it’s worth going over each one specifically.

This file specifies the public functions of your contract, which your user interface and other applications on the blockchain use to interact with it.

The other two files that were created carry the bin and bin-runtime file extensions. The bin file is the actual bytecode that gets combined with your encoded constructor arguments and included in the calldata of any contract creating transactions.

When the EVM evaluates your contract creating transaction, your contract’s constructor function is called. The return value of this constructor function is the actual contract that you will interact with on the blockchain, and it is somewhat different that the bytecode that was originally found in your bin file. For instance, the return value of the constructor function does not in turn include bytecode instructions for a constructor function. This return value can be known in advance when compiling your contract, and its value is included in the bin-runtime file.