Lesson 7 of 21
In Progress

Introduction to Solidity

If you’re a blockchain developer, you’ll need to learn Solidity, the programming language of the Ethereum platform. Solidity is a high-level, object-oriented language that is used to write smart contracts, which are self-executing contracts with the terms of the agreement between buyer and seller being directly written into lines of code.

In this article, we’ll provide a brief introduction to Solidity, including its syntax, data types, and common features. By the end of this article, you’ll have a good understanding of the basics of Solidity and be ready to start writing your own smart contracts.

Syntax

Solidity is similar to other object-oriented languages like JavaScript and C++, so if you’re familiar with these languages, you’ll find Solidity easy to learn.

Here is an example of a simple Solidity contract:

pragma solidity ^0.7.0;

contract MyContract {
  // State variables
  uint256 public counter;

  // Constructor
  constructor() public {
    counter = 0;
  }

  // Functions
  function incrementCounter() public {
    counter++;
  }
}

In this contract, we have a state variable counter of type uint256, which is an unsigned integer with a size of 256 bits. We also have a constructor function, which is a special function that is called when the contract is deployed, and an incrementCounter function, which increments the counter variable by 1.

Data Types

Solidity has a number of built-in data types, including integers, booleans, and strings. Here is a list of some of the most common data types:

  • bool: A boolean value (true or false)
  • int: A signed integer with a size of 256 bits
  • uint: An unsigned integer with a size of 256 bits
  • bytes: A dynamic-size byte array
  • string: A dynamic-size string

You can also define your own custom data types using structs, which are user-defined composite data types. Here is an example of a struct:

struct User {
  uint256 id;
  string name;
  bool isAdmin;
}

In this struct, we have three fields: an id field of type uint256, a name field of type string, and an isAdmin field of type bool.

Common Features

Solidity has a number of common features that you’ll use frequently when writing smart contracts. Here are a few of the most important ones:

Modifiers

Modifiers are used to modify the behavior of functions. For example, you might use a onlyOwner modifier to allow only the contract owner to call a function. Here is an example of a modifier:

modifier onlyOwner {
  require(msg.sender == owner, "Only the owner can call this function");
  _;
}

In this modifier, we use the require function to check that the caller of the function is the contract owner. If the caller is not the owner, the function will throw an exception. The _; syntax is used to indicate the position where the modified function will be executed.

Here is an example of how to use the onlyOwner modifier:

function setCounter(uint256 _newCounter) public onlyOwner {
  counter = _newCounter;
}

In this function, the onlyOwner modifier will be executed before the function body, and the function will only be allowed to be called by the contract owner.

Events

Events are used to emit log messages that can be accessed from the blockchain and can be used to trigger external functions. Here is an example of an event:

event CounterIncremented(uint256 oldCounter, uint256 newCounter);

In this event, we have two parameters: oldCounter and newCounter, which are both of type uint256.

To emit an event, you can use the emit keyword:

function incrementCounter() public {
  uint256 oldCounter = counter;
  counter++;
  emit CounterIncremented(oldCounter, counter);
}

In this function, we emit the CounterIncremented event with the oldCounter and counter values as parameters after the counter is incremented.

Mapping

Mapping is a data type in Solidity that allows you to store key-value pairs. The keys can be of any data type, and the values can be of any data type. Here is an example of a mapping:

mapping(uint256 => bool) public userExists;

In this mapping, the keys are of type uint256 and the values are of type bool. You can use this mapping to store whether a user with a particular id exists or not.

To set a value in a mapping, you can use the following syntax:

userExists[123] = true;

This sets the value for the key 123 in the userExists mapping to true.

Conclusion

In this article, we provided a brief introduction to Solidity, the programming language of the Ethereum platform. We covered the syntax of Solidity, the data types available in the language, and some common features such as modifiers, events, and mapping. With this knowledge, you should be able to start writing your own smart contracts in Solidity.

Exercises

To review these concepts, we will go through a series of exercises designed to test your understanding and apply what you have learned.

What is Solidity used for?

Solidity is used to write smart contracts, which are self-executing contracts with the terms of the agreement between buyer and seller being directly written into lines of code.

What is a struct in Solidity?

A struct in Solidity is a user-defined composite data type. It is used to define custom data types with multiple fields.

What is the purpose of a modifier in Solidity?

A modifier in Solidity is used to modify the behavior of functions. It can be used to add additional functionality or restrictions to a function.

What is the purpose of an event in Solidity?

An event in Solidity is used to emit log messages that can be accessed from the blockchain and can be used to trigger external functions.

What is a mapping in Solidity?

A mapping in Solidity is a data type that allows you to store key-value pairs. The keys can be of any data type, and the values can be of any data type. It is used to store data in a way that allows you to easily retrieve the value for a particular key.