Learn Solidity: Layout of a Solidity Source File & Structure of Smart Contracts

In this post, we will understand the default standard structure of the Solidity-Based Smart Contract file which generally has the .sol extension.

Please check out the amazing & professional courses on Blockchain, Ethereum, Hyperledger etc. on Tosh Academy.

[pastacode lang=”javascript” manual=”%2F%2Fversiona%20pragma%0Apragma%20solidity%200.4.8%3B%20%0A%0A%2F%2Fimport%20section%0Aimport%20%22filename%22%3B%0A%0A%2F%2Fbegin%20the%20contract%0A%2F%2F%2F%20%40title%20This%20is%20the%20layout%20of%20the%20solidity%20code%0Acontract%20ContractName%20%7B%0A%20%20%20%20%2F*%0A%20%20%20%20*%20%40title%20A%20Simple%20Layout%20Example%0A%20%20%20%20*%20%40author%20Toshendra%20Sharma%0A%20%20%20%20*%20%40notice%20Example%20for%20the%20Solidity%20Course%0A%20%20%20%20*%20%40dev%20This%20line%20is%20for%20developers%20only%0A%20%20%20%20*%20%0A%20%20%20%20*%2F%0A%0A%20%20%20%20%2F%2F%20This%20is%20a%20single-line%20comment.%0A%0A%20%20%20%20%2F*%0A%20%20%20%20This%20is%20a%0A%20%20%20%20multi-line%20comment.%0A%20%20%20%20*%2F%0A%0A%20%20%20%20%2F%2F%20State%20Variables%0A%20%20%20%20address%20public%20stateVariable1%3B%0A%20%20%20%20uint%20public%20stateVariable2%3B%0A%20%20%20%20uint%20private%20stateVariable3%3B%0A%20%20%20%20string%20public%20constant%20HOST_ID%20%3D%200×1234%3B%0A%0A%20%20%20%20%2F%2F%20Events%0A%20%20%20%20event%20LogEvent1(address%20param1%2C%20uint%20param2)%3B%0A%20%20%20%20event%20LogEvent2(address%20param1)%3B%0A%20%20%20%20event%20LogEvent3()%3B%0A%0A%20%20%20%20%2F%2F%20Function%20Modifiers%0A%20%20%20%20modifier%20onlyIfOwnerModifier()%20%7B%20%0A%20%20%20%20%20%20%20%20if%20(msg.sender%20!%3D%20owner)%20throw%3B%0A%20%20%20%20%20%20%20%20_%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20modifier%20onlyIfMortalModifier()%20%7B%20%0A%20%20%20%20%20%20%20%20if%20(msg.sender%20!%3D%20mortal)%20throw%3B%0A%20%20%20%20%20%20%20%20_%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20Struct%2C%20arrays%20or%20Enum%20if%20any%20here%0A%20%20%20%20enum%20enum1%20%7B%20val1%2C%20val2%2C%20val3%20%7D%0A%20%20%20%20struct%20struct1%20%7B%20%0A%20%20%20%20%20%20%20%20uint%20weight%3B%0A%20%20%20%20%20%20%20%20uint%20height%3B%0A%20%20%20%20%20%20%20%20address%20location%3B%0A%20%20%20%20%7D%0A%20%20%20%20mapping%20(address%20%3D%3E%20uint)%20balances%3B%0A%0A%0A%20%20%20%20%2F%2F%20Define%20consutruct%20here%0A%20%20%20%20function%20ContractName(uint%20initialCoins)%20%7B%0A%20%20%20%20%20%20%20%2F%2F%20Initialize%20state%20variables%20here%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%2F%20%40dev%20Comment%20for%20developers%0A%20%20%20%20%2F%2F%2F%20%40param%20parameters%20details%0A%20%20%20%20%2F%2F%2F%20%40return%20return%20variable%20details%0A%20%20%20%20function%20function1(address%20param1%2C%20uint%20param2)%20%7B%0A%20%20%20%20%20%20%20%2F%2Fbody%20of%20function%20here%0A%20%20%20%20%20%20%20%2F%2F%0A%20%20%20%20%20%20%20%2F%2F%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%2F%20%40dev%20Comment%20for%20developers%0A%20%20%20%20%2F%2F%2F%20%40param%20parameters%20details%0A%20%20%20%20%2F%2F%2F%20%40return%20return%20variable%20details%0A%20%20%20%20function%20function2(address%20param1%2C%20uint%20param2)%20%7B%0A%20%20%20%20%20%20%20%2F%2Fbody%20of%20function%20here%0A%20%20%20%20%20%20%20%2F%2F%0A%20%20%20%20%20%20%20%2F%2F%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2Fdefault%20function%0A%20%20%20%20function()%7B%0A%20%20%20%20%20%20%20%20throw%3B%0A%20%20%20%20%7D%0A%0A%7D” message=”Default Structure of Solidity Files” highlight=”” provider=”manual”/]

AD-Blockchain-Council-01

As you can see in the above code, It always starts with version pragma followed by optional import section through which you can import any existing.sol files into the current .sol file. Then we begin the smart contract, write the inline comments for the auto-generation of the documentation for developers & define the state variables, events, & modifiers without any particular order.

We then write the constructor of the contract which gets called at the time of the creation of the contract. All the parameters of the constructor must be passed during the creation of the contract.

Then we continue writing the functions and at last (which is optional) we define the default function which will be called if the called function is not defined in the contract.

Let’s move the to the next post and understand the General Value Types in Solidity.

Previous: Basics of Solidity By Example?Next: General Data Types in Solidity