Today we are looking at the Solidity Compiler from Command Line Interface (CLI)
In Solidity, you define the compiler version using the keyword pragma solidity
followed by the compiler version. There are different ways to specify the compiler version.
- stating the version like
0.x.x
. This will say that you are using the exact version specified. - using the
^
symbol: this will tell the compiler to use either the latest version or the current version specified. - You can also use the operators
<
,>
,<=
and>=
to specify a range.
Output Components:
--ast AST of all source files.
--ast-json AST of all source files in JSON format.
--ast-compact-json AST of all source files in a compact JSON format.
--asm EVM assembly of the contracts.
--asm-json EVM assembly of the contracts in JSON format.
--opcodes Opcodes of the contracts.
--bin Binary of the contracts in hex.
--bin-runtime Binary of the runtime part of the contracts in hex.
--clone-bin Binary of the clone contracts in hex.
--abi ABI specification of the contracts.
--hashes Function signature hashes of the contracts.
--userdoc Natspec user documentation of all contracts.
--devdoc Natspec developer documentation of all contracts.
--metadata Combined Metadata JSON whose Swarm hash is stored on-chain.
--formal Translated source suitable for formal analysis.
Let's have a look to the different options available.
According to the Wikipedia definition, an AST is :
the tree representation of the abstract syntactic structure of a source code written in a programming language.
Let's see a really simple example. Create a file first-contract.sol
and paste the following source code into it :
pragma solidity >=0.4.16 <0.7.0;
contract MyFirstContract {
string name = "your name";
}
Save it and compile it using the solc
compiler via the Command Line Interface and the --ast
option.
solc first-contract.sol --ast
You should obtain the following output :
======= first-contract.sol =======
PragmaDirective
Source: "pragma solidity >=0.4.16 <0.7.0;"
ContractDefinition "MyFirstContract"
Source: "contract MyFirstContract {\n\n\tstring name = \"your name\";\n}"
VariableDeclaration "name"
Type: string storage ref
Source: "string name = \"your name\""
ElementaryTypeName string
Source: "string"
Literal, token: [no token] value: your name
Type: literal_string "your name"
Source: "\"your name\""