in

Solidity Tutorial – A Detailed Introduction

Have you heard of smart contracts? There are many potential instances in blockchain technology where you can come across the mention of smart contracts. The arrival of blockchain technology has created substantial popularity for smart contracts. So, the demand for a good solidity tutorial is increasing considerably as it is an important and commonly preferred language for developing smart contracts. 

Now, any individual who is new to the domain of blockchain i.e. blockchain beginners should learn solidity as an alternative for developing the skills required to build smart contracts and decentralized apps. It is important to know how Solidity is suitable for smart contract development with a detailed overview of different components. 

With a better impression of the components in the architecture and working of solidity, learners should also reflect on examples. At the same time, a detailed reflection on different ways of using solidity could be helpful for understanding its significance. Furthermore, many students also ask, ‘is solidity easy to learn?’ and it is important to know that it is easier to learn about solidity with the proper tutorial. 

The following discussion offers a detailed overview of solidity and other related aspects such as types, functions, events, and inheritance. In addition, the discussion also offers promising levels of flexibility in learning through reflection on solidity examples. 

Enroll Now: Ethereum Development Fundamentals Course

Table of Contents

Getting Started with Solidity Tutorial: What is Solidity?

The first important thing in any solidity tutorial would refer to its definition. It is a high-level programming language focused on designing and implementing smart contracts. The primary influences on Solidity include C++, JavaScript, and Python with a specific orientation for targeting the Ethereum Virtual Machine. 

solidity logo

You can use solidity for developing decentralized applications or dApps on the Ethereum blockchain. Solidity came forward in 2015 under the leadership of Christian Reitwiessner. The key highlighted features of solidity are important aspects that showcase the power of solidity in an abridged version. Here are the notable features you would find when you learn solidity.

  • Solidity is a statically-type language tailored for the implementation of smart contracts. It leverages the object-oriented or contract-oriented foundation for building and deploying smart contracts. 
  • Solidity is a suitable programming language for the creation of contracts that deal with blind auctions, multi-signature wallets, voting, crowdfunding, and other applications. 
  • Solidity offers comprehensive support for complicated approaches in user-defined programming alongside inheritance and libraries. 

Concepts You Should Know to Understand Solidity

The most important detail that you would uncover in a solidity tutorial refers to the fact that it is the primary language tailored for platforms running blockchains. First, you need to get yourself familiar with the important aspects that are essential for understanding solidity. 

Ethereum 

The importance of Ethereum in the journey to learn solidity is quite obvious in its definitions. Solidity is targeted at the Ethereum Virtual Machine, thereby calling for the attention of learners towards Ethereum. Basically, Ethereum is an open-source, decentralized platform that is based on the blockchain model and helps in execution of smart contracts. In the simplest terms, it is an open software platform that leverages blockchain for helping developers in building and deploying decentralized applications. The Ethereum blockchain is primarily focused on executing code for decentralized applications. 

One of the most important highlights in a solidity tutorial also refers to the work of miners in earning Ether, crypto token fuelling the Ethereum network. Ether also serves as something more than a tradable cryptocurrency, with application developers relying on ether for making payments for transaction services and fees on the Ethereum network. 

The Ethereum blockchain also leverages another token variant for paying fees to miners for inclusion of transactions in specific blocks. The other token on the Ethereum blockchain refers to a gas, which is crucial for all transactions that involve the execution of smart contracts. Ethereum Gas is one of the most important requirements for enticing miners for planting the execution of a smart contract in the blockchain. 

Ethereum Virtual Machine 

The next important aspect in Ethereum blockchain that is essential in understanding solidity for beginners is the Ethereum Virtual Machine. Also referred to as EVM, the Ethereum Virtual Machine basically facilitates a runtime environment for the execution of smart contracts in Ethereum. EVM is essential for offering the desired security and facility for executing untrusted code through an international network comprising of public nodes. 

The significance of EVM is also evident in the effectiveness of preventing Denial-of-Service or DOS attacks. In addition, EVM is also responsible for ensuring that a specific program does not have access to the states of each other. Furthermore, the functionality of EVM also points out establishing communication without any relevant interference. 

Smart Contracts 

When you start with a solidity tutorial, you are most likely to come across smart contracts at one point. Smart contracts are basically the storehouses of all the business logic that people need in their application lives. Ethereum Smart contracts feature all the functions and variables belonging to the contract alongside serving as the initial point for all projects. So, it is important to start learning about Solidity immediately with a basic example of smart contracts. 

Even if you might face certain doubts in understanding examples of solidity smart contracts, there is always an easier way. The following smart contract example written with solidity focuses on setting the value of a variable. In addition, it can also help in exposing the value of a variable for opening up access to other contracts. 

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.4.16 <0.9.0;

contract SimpleStorage {

uintstoredData;

function set(uint x) public {

storedData = x;

}

function get() public view returns (uint) {

return storedData;

}

}

The first line in the example smart contract in solidity for beginners shows the licensing of the source code. You can notice that the licensing of the source code follows the GPL version 3.0. It is important to focus on machine-readable license specifiers in an environment that allows the default publication of source code. 

The following line in the smart contract shows that the source code is compatible with Solidity version 0.4.16 or newer versions of the language. You can also notice that it clearly mentions that the language supported for the smart contract could not include version 0.9.0. The concerns of the version primarily focus on ensuring that the contract could be compiled with a new or breaking compiler version. 

In comparison to previously estimated deviant behavior, the contract could be easily compiled with a new compiler version. Smart contracts use pragmas as common instructions to help compilers in understanding the ideal approaches for treating the source code. 

While working with Solidity, you may come across some issues. Read our previous article to know more about the Top Solidity Issues.

Decoding the Components of a Smart Contract

The importance of a smart contract is one of the formidable aspects of a solidity tutorial. The perception of a contract with respect to Solidity basically points out an assortment of code with its functionality and the data in its relevant state. The contract is located at a specific address on the Ethereum blockchain. A closer look at the smart contract example code written in solidity also showcases other functions in the smart contract. 

uintstoredData helps in declaring a state variable known as storedData, which is of the type uint or unsigned integer measuring 256 bits. 

People can rightly assume that it is a single slot in the database that you can query and modify by calling functions of the code responsible for database management. The example also showcases solidity best practices of defining the functions of getting and set. Both the functions could help in the modification or retrieval of the value of the variable. Furthermore, solidity offers the advantage of avoiding the prefix ‘this’ that is quite common in other languages. 

The basic function of the smart contract example could only allow an individual to store a single number, accessible to any individual in the world, without a suitable approach for preventing users from publishing the number. Although any other individual can call a set function and assign a different number, it will always stay in the blockchain history. In addition, you can also impose access restrictions for ensuring that only you have the capabilities for modifying the number.

Also Read: Smart Contract Use Cases

Solidity Compiler Installation

The importance of solidity for smart contracts might have become clear by now. However, it is important to set up the environment for solidity in any solidity tutorial. The common methods for installation of solidity compiler can provide a detailed impression of its working. Here are the different methods for setting up the Solidity environment with their unique functionalities.

Versioning

One of the first examples of solidity blockchain setup refers to versioning and, most importantly, semantic versioning. The different versions of solidity abide by semantic versioning with the facility of nightly development builds for associated releases. The nightly development builds could not guarantee the functionality and could include undocumented and potentially broken modifications. Furthermore, solidity best practices also imply the use of the latest release versions. 

Remix

Remix is one of the recommended tools in almost every solidity tutorial for learning quickly about smart contracts and solidity. It offers an online integrated development environment or IDE for writing Solidity smart contracts, followed by deploying and running them. 

You may access Remix IDE online without the need for any additional installations. Furthermore, it also allows offline usage with the convenience of options for evaluating nightly builds without the installation of various Solidity versions. Interestingly, users can also opt for command line Solidity compiler software when they need additional compilation options or have to work on a larger contract. 

Node.js/ npm

The easiest approach to set up an environment for working with Solidity is ‘npm.’ You can just depend on npm for better convenience and flexibility for installation of a Solidity compiler named solc-js. The solc-js program also presents comparatively limited functionalities in comparison to the ways for accessing the compiler. Users can access the documentation for using solc-js in its own repository for flexible learning. 

The important highlight of this method of setting up the compiler in a solidity tutorial is the fact that solc-js compiler is based on C++solc. The solc-js project utilizes Emscripten and ensures that both are utilizing similar compiler source code. It could serve useful for JavaScript projects based on Remix directly. The solc-js repository provides the documentation required for using it. 

Docker Image

The next flexible approach for setting up a solidity blockchain environment refers to the use of Docker images. Users could opt for pulling a Docker image followed by starting its use for Solidity programming. The best thing about using Docker image to set up a Solidity environment is the simplicity of steps. The first step involves the application of command for pulling a Docker image of Solidity. The command is,

$docker pull ethereum/solc:stable

The second step in the solidity examples with Docker refers to verification of the Docker image after it is downloaded. The following command could help you install a Solidity compiler and environment with Docker images. 

$docker run ethereum/solc:stable-version

By completing these two steps, you can find the following output as the printout,

$ docker run ethereum/solc:stable -version

solc, the solidity compiler commandlineinterfaceVersion: 0.5.2+commit.1df8f40c.Linux.g++

Binary Packages

Students are also likely to come across binary packages as a preferred method for setting up Solidity. In addition, it is important to note in a solidity tutorial that you can find them easily on the official Solidity website. The official website of Solidity also features PPAs for Ubuntu and helps in obtaining the latest stable version. 

Solidity also offers a snap package for Solidity installation of all the compatible Linux distributions. The snap packages enable strict restrictions, thereby enabling a highly secure environment for snap packages, albeit with limitations. The limitations are focused only on accessing the files in /media and /home directories. 

Understanding  the Solidity Syntax

When you think of ‘Is solidity easy to learn?’ there are many questions that will pop up subsequently. However, the syntax of solidity for writing a smart contract, as highlighted earlier in the discussion, provides a better understanding. The code for Solidity program that sets up a basic smart contract serves as the soul of any solidity tutorial. 

Pragma

The first line in the code for a Solidity smart contract is the pragma directive. Solidity examples like the one highlighted here feature the pragma directive informing the writing of source code for Solidity version 0.4.16. In addition, it also specifies the support of the smart contract for Solidity versions above the specified version. The pragma directive in the smart contract also restricts the use of Solidity to version 0.9.0. 

In most cases, the pragma directive is always local in nature to a source file. Therefore, importing another file does not suggest that the pragma of the file will apply automatically to the importing file. So, users can write a pragma for a file that will not work on versions earlier than 0.4.0 and also on compiler version starting from 0.5.0 by using the following command,

pragma solidity ^0.4.0;

The ^, in this case, is useful for adding the second condition. 

Contract 

You might have found already about the uintstoredData component in the example outlined in this Solidity tutorial. It is nothing but the Solidity contract and is basically the collection of code and data located on a particular address on the Ethereum blockchain. The different components of the contract help in declaring a state variable alongside configuring functions for modification or retrieval of variable values. 

File Importing

Beginners would also likely come across the need for importing files when they learn solidity syntax. Now, you might be searching for the import statement in the example considered for this discussion. However, Solidity provides support for import statements that present favorable similarities with the import statements evident in JavaScript. You can find the following statement as an example in the solidity tutorial for importing global symbols from xyz. 

import “xyz”;

In addition, the following statement could also serve as a promising example for creating a new global symbol. The new global symbol with the title ‘symbolName’ has global symbols from ‘xyz’ as its members. 

import * as symbolName from “xyz”; 

When you want to import a file termed ‘x’ from the same directory in which the current file is present, you can use,

import “./x” as x

In addition, using import “x” as x could help in referencing a different file in a global “include directory.”

Reserved Keywords

The most important aspect in understanding syntax in a Solidity tutorial also refers to reserved keywords. The reserved keywords in solidity are important requirements to use the programming language. The knowledge of keywords is essential to help in a better understanding of solidity for beginners as they can identify correctly. Users could depend on their knowledge of reserved keywords for developing the logic for application code easily. Here is an outline of some of the reserved keywords you can find in Solidity,

  • Abstract
  • Auto
  • Alias
  • Default
  • Override
  • Sizeof
  • Unchecked
  • Typedef
  • Inline
  • Copyof
  • Apply
  • Reference
  • Try
  • Static
  • Define 
  • After
  • Switch
  • Case 
  • Immutable
  • Typeof

In addition, you can find many other keywords in solidity blockchain examples for improving knowledge of basic solidity syntax. 

Check out the Solidity official documentation to learn more about the Solidity.

Learn the Working of Solidity 

Now that you have a clear impression of different components in the syntax of solidity alongside how they related to smart contract functionalities, it is important to dive into the working of Solidity. Let us take one of the most common solidity examples to understand the working.

In the following example, the chosen compiler for the Solidity environment is – Remix IDE. It also helps in running the Solidity Codebase. Here are some of the important steps that you can follow for getting started with the basic working of solidity. Now, you should take the assumption of the following code in this solidity tutorial for explaining how it works. 

pragma solidity ^0.5.0;

contract SolidityTest {

constructor() public{

   }

   function getResult() public view returns(uint){

uint a = 1;

uint b = 2;

uint result = a + b;

      return result;

   }

}
  • In the first step of the basic example of working blockchain for beginners, you have to copy the specific code in the Remix IDE Code Section. 
  • Now, you have to select the ‘Compile’ tab, and then you can click on the ‘Start to Compile’ button.
  • Subsequently, you have to move your attention towards the ‘Run’ tab, where you have to click on the ‘Deploy’ button. 
  • In the next step, users are still on the ‘Run’ tab, and you have to open the drop-down for selecting ‘Solidity Test at 0x’ option.
  • Finally, users can click on the getResult button to display the output of the code written in Solidity language. 

After completing all the steps of writing a code and compiling it in Solidity, you would find the following output.

0: uint256: 3

Importance of Comments

The importance of comments in any solidity tutorial is unquestionable, and Solidity offers profound support for C-type and C++-type comments. Therefore, any type of text between the characters ‘/*’ and ‘*/’ is referred to as a comment which could span multiple lines. In addition, any type of text found between the ‘//’ and the end of a line is referred to as a comment, and most importantly, the Solidity compiler ignores the text. Here is an example that can outline the ideal use of comments.

function getResult() public view returns(uint){

   // This is a comment. It is similar to comments in C++

   /*

      * This is a multi-line comment in solidity

      * It is very similar to comments in C Programming

   */

uint a = 1;

uint b = 2;

uint result = a + b;

   return result;

}

Enroll Now: Certified Enterprise Blockchain Professional (CEBP) Course

Variable Types in Solidity

Undoubtedly, variables are an important requirement for writing programs in any programming language. So, you would also need variables in a Solidity tutorial to understand how they can help in storing different information. It is essential to observe that variables are just reserved memory locations for storing values. Therefore, you could inherently reserve a certain amount of space in memory with the creation of a variable. 

The sheer variety of variables required in Solidity might create doubts such as ‘is solidity easy to learn?’ although without confusion. Users could store information related to different data types such as character, floating-point, double floating-point, wide character, Boolean, integers, and others. The operating system ensures memory allocation and selection of entities to store in reserved memory according to the variable’s data type.  

Value Types

A detailed overview of any tutorial on solidity blockchain programming language would help you find different data types. Solidity enables a formidable assortment of in-built and user-defined data types. Here are important data types that you could find in solidity,

  • Boolean
  • Signed and unsigned integers
  • Signed integer from 8 bits to 256 bits
  • Unsigned integer from 8 bits to 256 bits
  • Signed and unsigned fixed-point numbers varying in sizes
  • Signed fixed-point number, represented by fixedMxN, with M representing number of bits accounted by type with N representing decimal points. M must be divisible by 8 while ranging from 8 to 256. On the other hand, N could vary from 0 to 80. The value of fixed is similar to fixed128x18. 
  • Unsigned fixed-point number, represented by ufixedMxN with M and N representing the same as above. The value of ufixed also remains similar to ufixed128x18.

Address

The ‘address’ element in the solidity tutorial refers to the 20-byte value, which represents the size of the Ethereum address. An address could basically help in getting the balance by using the method of ‘.balance.’ The method could help in transferring the balance to other addresses through the ‘.transfer’ method.  Here is an example of the use of the address in Solidity.

address x = 0x212;

address myAddress = this;

if (x.balance< 10 &&myAddress.balance>= 10) x.transfer(10);

Watch our on-demand, exclusive webinar on the Approaches to Overcome Issues for Enterprise Blockchains now!

Understanding Variables in Solidity

The perception of variables is also one of the crucial requirements to learn solidity. You can find support for three variable types such as state variables, local variables, and global variables in Solidity. State variables are the ones that have their values stored permanently in contract storage. The local variables are the ones that have their value present for the course of execution of a function. 

On the other hand, global variables are special variables that are present in the global namespace and help in obtaining information regarding blockchain. It is important to verify that as a statically typed language, Solidity requires a specification for state or local variable type at the time of declaration. All the declared variables are associated with a default value according to its type without any concept of “null” or “undefined.” Let’s reflect a bit more on the types of variables in Solidity.

State Variable

You can find state variables where the values are stored permanently in contract storage. The example of a state variable is clearly evident in the following example,

pragma solidity ^0.5.0;

contract SolidityTest {

uintstoredData;      // State variable

constructor() public {

storedData = 10;   // Using State variable

   }

}

Local Variable

The value of local variables is accessible only within the function that has been used for defining it. It is also important to note that function parameters are local in nature to the concerned function as in the following example.

pragma solidity ^0.5.0;

contract SolidityTest {

uintstoredData; // State variable

constructor() public {

storedData = 10;   

   }

   function getResult() public view returns(uint){

uint a = 1; // local variable

uint b = 2;

uint result = a + b;

      return result; //access the local variable

   }

}

Global Variables

Global variables are quite unique when it comes to a solidity tutorial. They are ideal for obtaining information regarding blockchain and associated transaction properties. Here is an outline of the global variables in Solidity, along with their functions.

  • blockhash(uintblockNumber) returns (bytes32): Represents hash of the concerned block and works only for the 256 latest blocks while ignoring current blocks.
  • block.coinbase (address payable): Shows the address of current block miner.
  • block.difficulty (uint): Points out the difficulty of a block.
  • block.gaslimit (uint): Shows the gaslimit of current block.
  • block.number (uint): Shows the current block number.
  • block.timestamp (uint): Displays the timestamp of current block in terms of the seconds passed since the unix epoch.
  • msg.sig (bytes4): Can find out the first four bytes of the function identifier or calldata.
  • msg.data (bytes calldata): Shows the complete calldata.
  • now (uint): You can find the information of the current block timestamp.

Variable Name Rules

You should also search for the ideal practices to name variables in a solidity tutorial. It is important to abide by the following rules thoroughly for naming variables in the Solidity programming language. 

  • The foremost condition for naming variables in Solidity is that you cannot begin the name with numerals. So, you could not use any numeral between 0 and 9 to start the variable name in Solidity. It is mandatory to start the variable name with a letter or an underscore character. Therefore, 023Freedom is not a valid variable name, while Freedom023 or _023Freedom are valid choices.
  • The solidity best practices for naming variables also point out towards case-sensitivity of solidity variable names. For example, freedom and Freedom are considered as two different variables.
  • The next most important practice in creating the suitable variable name refers to staying away from using reserved keywords. Reserved keywords such as Boolean or break variables names are not eligible for Solidity variable names. 

The final aspect in understanding the use of variables for starting the applications of Solidity is variable scope. The variable scope is important in the solidity tutorial as it differs for local variables and state variables. Local variables are restricted only to the function where they are defined.

On the other hand, state variables in a solidity tutorial would refer to public, private, and internal scope. It is possible to access public state variables internally and through messages. Private state variables are open for access internally only from the current contract. Internal state variables allow for internal access only through the current contract. 

Preparing for an Ethereum interview? Go through the top Ethereum Interview Questions and get ready for the interview.

Understanding Common Solidity Use Cases

Solidity is undoubtedly the preferred alternative when it comes to developing smart contracts on the Ethereum blockchain. The simple programming language can let users create and deploy their smart contracts on the Ethereum blockchain for different use cases. Smart contracts developed with Solidity have the potential for revolutionizing different platforms with faster and transparent transactions, with every party involved in the transactions being held accountable for their actions. Let us take a look at the top use cases of Solidity for developing smart contracts for different sectors.

  • Banking and Financial Services 

Solidity can serve as a helpful instrument for creating smart contracts that could increase the speed of banking transactions. You could easily find the use cases of Solidity for the banking and financial services sector in any solidity tutorial. Users can ensure that solidity smart contracts reduce possibilities of errors in financial transactions while maintaining the transparency of the transaction.  Furthermore, smart contracts based on Solidity could serve distinct purposes for mortgages, insurance claims, cross-border payments, national bonds, and other banking services. 

Learn the basic and advanced concepts of Blockchain in Finance and get expertise in the finance sector. Enroll now in the Blockchain in Finance masterclass.

  • Upgradeable Contracts

One of the most noticeable use cases of Solidity that you would come across when you learn Solidity is the facility for creating upgradeable contracts. Solidity provides many approaches for enabling smart contracts to interact with other contracts. Since blockchain is immutable, it is practically impossible to modify the code of a smart operational contract after it starts. However, the use of a method of assigning calls supported with a proxy designed through pointing to another contract containing the actual business logic can help in improving the functions of a contract. It can help in providing different target addresses to the proxy contract. 

  • Trade Finance

A solidity is also a vital tool for designing smart contracts to cater to the domain of trade finance. Generally, the process of issuing a Letter of Credit in trade finance emphasizes the need for substantial coordination and paperwork. In such cases, the load of physical documentation could cause delays in receipt of shipments. Therefore, Solidity-based smart contracts could help in reducing risks while ensuring faster execution of transactions. At the same time, limited manual intervention could also preset possibilities of better process efficiency. 

  • Data Storage

The next important mention among use cases in a Solidity tutorial refers to the creation of smart contracts that can serve as data stores. Solidity can help in separating logic and data in various smart contracts. It is important to note that substitute contracts could help in developing or modifying the logic of a contract. Subsequently, the substitute contracts also maintain all the related conditions for data in the concerned contract. Therefore, Solidity can help users in calling and creating contracts by using a smart base contract. 

  • Digital Identity 

Digital identity will always remain a top priority for use cases of Solidity. Smart contracts designed with Solidity can resolve problems of data monopoly and identity theft. The increasing cases of identity theft and related losses call for secure identity management solutions. Solidity-based smart contracts could help in resolving such concerns and also allow for secure storage of credentials. As a result, you can ensure the safety of your personal information while also enjoying seamless access to all services with your digital identity.      

Solidity Tutorial: Bottom Line

On a final note, it is quite clear that Solidity programming language is a flexible and easy-to-understand language. It can help in developing smart contracts, and the basic Solidity syntax for creating a smart contract proves the same. A detailed reflection on the foundations of Solidity is important to start with a Solidity tutorial.

As the preferred programming language for blockchain development, primarily targeted towards Ethereum, Solidity delivers comprehensive simplicity. With inspiration from C, C++, and JavaScript, learners will face limited difficulties in familiarizing themselves with Solidity.

The body of literature associated with Solidity and its functionalities is quite extensive. Explore the world of Solidity further in more detail to master it right now. However, we recommend you start with the Ethereum Development Fundamentals course to learn the basics of Solidity and Ethereum!

The post Solidity Tutorial – A Detailed Introduction appeared first on 101 Blockchains.

Go to Source
Author: Diego Geroni

What do you think?

Written by secret

Leave a Reply

Your email address will not be published. Required fields are marked *

Bitcoin Cash Price Prediction: BCH/USD Down By 20.54%

NFTs in Enterprise Blockchain