Skip to Content
CoursesEthereum Course 2025Project: ERC20 Token SaleBehind the Scenes: Reserved Keywords

Units in Solidity

There are a number of really handy units in Solidity. We already used some before, but I haven’t formally introduced them yet.

View the Full Course Now 

It’s gonna be a quick lab, but I still want to talk about them.

Monetary or Ether Units

Let’s start with a problem that we are going to solve.

Suppose you want to make sure a user doesn’t send more than 2 ether, but not less than 1 ether.

There are three ways to write that:

require(msg.value >= 1000000000000000000 && msg.value <= 2000000000000000000, "msg.value must be between 1 and 2 ether)

version 2 is a bit easier:

require(msg.value >= 1e18 && msg.value <= 2e18);

version 3 is probably the best and most easily readable:

require(msg.value >= 1 ether && msg.value <= 2 ether);

There are three units available: ether which basically multiplies the number literal in front with 1e18 gwei which stands for 1e9 wei which stands for 1

It’s still good to write simply 1 wei if you mean ā€œ1 weiā€. It is much easier to catch bugs and it doesn’t make a difference in the compiled smart contract size.

Time units

Let’s suppose you want a crowdsale to start X days after the deployment, and run for 7 days. There are again multiple ways to achieve that:

Version 1:

uint runUntilTimestamp; uint startTimestamp; constructor(uint startInDays) { startTimestamp = block.timestamp + (startInDays * 24 * 60 * 60) runUntilTimestamp = startTimestamp + (7 * 24 * 60 * 60) }

If you come from JavaScript you probably already know this dealing with timestamps too well…

Version 2 is much easier:

uint runUntilTimestamp; uint startTimestamp; constructor(uint startInDays) { startTimestamp = block.timestamp + (startInDays * 1 days); runUntilTimestamp = startTimestamp + 7 days; }

Arguably, much easier to read. Now on to self-destruction of smart contracts.

Last updated on