Solidity Programing 101: Data types

In the solidity programming language, data types are used to define the type of data that can be stored and manipulated within a smart contract. By explicitly defining the data types used in a contract, developers can ensure that the contract’s operations are performed correctly and securely.

Basic data types

Solidity provides several built-in data types, including integers, booleans, and strings. These types are fairly self-explanatory, with integers representing whole numbers, booleans representing true or false values, and strings representing sequences of characters.

// Integer data type
uint256 myInt = 25;
// Boolean data type
bool myBool = true;
// String data type
string myString = "Hello, world!";

Complex data types

In addition to these basic data types, solidity also provides support for more complex data types, such as arrays and structs. Arrays are used to store a sequence of data values, while structs are used to group together related data values.

// Fixed-size array data type
uint256[3] myFixedArray = [1, 2, 3];
// Dynamically-sized array data type
uint256[] myDynamicArray;
// Struct data type
struct MyStruct {
uint256 x;
uint256 y;

One of the unique features of solidity is its support for fixed-size and dynamically-sized arrays. Fixed-size arrays have a fixed number of elements, which must be specified when the array is declared. This can be useful in situations where the number of elements in the array is known in advance and does not need to change at runtime.

// Declare a fixed-size array with 3 elements
uint256[3] myFixedArray = [1, 2, 3];

On the other hand, dynamically-sized arrays can grow or shrink in size at runtime, allowing developers to more easily work with variable amounts of data. This is achieved using the push and pop functions, which can be used to add and remove elements from the array, respectively.

// Declare a dynamically-sized array
uint256[] myDynamicArray;
// Add an element to the dynamically-sized array
// Remove the last element from the dynamically-sized array

The address type

Another important data type in solidity is the address type. This type represents the address of an Ethereum account, and is used to send and receive Ether and interact with other contracts. The address type also provides access to a number of built-in functions that can be used to perform common operations, such as checking the balance of an account or calling functions on other contracts.

// Declare a variable of the address data type
address myAddress = 0x1234567890abcdef;
// Check the balance of the address
uint256 balance = myAddress.balance;
// Call a function on another contract"myFunction(uint256,string)")), 25, "Hello, world!");


It’s also worth noting that solidity provides support for various modifiers and custom data types, which can be used to add additional functionality and constraints to a contract. Modifiers are special keywords that can be applied to functions to specify conditions that must be met before the function can be executed. For example, the onlyOwner modifier can be used to restrict the execution of a function to only the contract’s owner.

// Define a modifier that can only be used by the contract owner
modifier onlyOwner {
require(msg.sender == owner);

// Define a function that can only be executed if the caller is the contract owner
function myFunction() public onlyOwner {
// Function body

Custom data types

Custom data types, on the other hand, can be used to create more complex data structures and reusable code. By defining custom data types, developers can create their own data structures that can be used throughout a contract, making it easier to write clean, modular, and maintainable code.

// Define a custom data type
struct Point {
int x;
int y;

// Use the custom data type in a function
function movePoint(Point memory p, int dx, int dy) public {
p.x += dx;
p.y += dy;


In summary, the solidity programming language provides a robust set of built-in data types that can be used to define the data stored and manipulated within a smart contract. These data types include basic types like integers and strings, as well as more complex types like arrays and structs. Understanding and effectively using these data types is crucial for developing smart contracts that are correct, secure, and performant.

If you enjoyed this article and want to learn more about the Ethereum developer ecosystem, be sure to follow me on Twitter at @0xSolidititty for regular updates and insights.




Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store

Solidity and web3 developer sharing my thoughts and knowledge.