> For the complete documentation index, see [llms.txt](https://zokyo-auditing-tutorials.gitbook.io/zokyo-informational-vulnerabilities/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://zokyo-auditing-tutorials.gitbook.io/zokyo-informational-vulnerabilities/tutorials/informational-vulnerability-15-time-units.md).

# Informational Vulnerability 15: Time units

{% hint style="info" %}
[**Book an audit with Zokyo**](https://www.zokyo.io/)
{% endhint %}

### **Introduction**

Code clarity and readability are foundational aspects of efficient smart contract development. In Solidity, when dealing with numeric values related to time, applying explicit time units is a powerful practice that boosts the code's readability and understandability. It mitigates the chances of misinterpretation that often come with raw numeric values, often referred to as "magic numbers". This tutorial aims to elucidate the importance of using time units in your Solidity code, emphasizing their advantage over magic values.

### **Avoiding "Magic" Values with Time Units**

"Magic" values, such as `60` for minutes in an hour or `86400` for seconds in a day, can often make code harder to understand and maintain. These numbers by themselves don’t carry clear meanings, making the code less intuitive. Solidity offers explicit time units like seconds, minutes, hours, days, and weeks, allowing for a more readable representation of time-related values.

#### **Example with Magic Values:**

```solidity
solidityCopy codepragma solidity ^0.8.0;

contract Auction {
    uint256 public auctionEndTime = block.timestamp + 86400; // Magic value
    
    function isAuctionEnded() public view returns (bool) {
        return block.timestamp >= auctionEndTime;
    }
}
```

#### **Refactored Example with Time Units:**

```solidity
solidityCopy codepragma solidity ^0.8.0;

contract Auction {
    uint256 public auctionEndTime = block.timestamp + 1 days; // Using time unit
    
    function isAuctionEnded() public view returns (bool) {
        return block.timestamp >= auctionEndTime;
    }
}
```

### **Benefits of Using Time Units**

1. **Enhanced Readability:**
   * Time units make the code more expressive, conveying the intention more clearly.
2. **Reduced Ambiguity:**
   * Magic values are prone to misinterpretation. Time units bring explicitness and precision, leaving less room for errors.
3. **Ease of Maintenance:**
   * With explicit time units, code modifications become easier, promoting better maintenance and fewer errors.

### **Utilizing Time Units in Solidity**

Solidity supports various time units out-of-the-box, including seconds, minutes, hours, days, and weeks. Here’s how you can apply these units in your smart contracts:

#### **1. Seconds:**

* By default, values are considered in seconds.
* Example: `uint256 time = 60; // Represents 60 seconds`

#### **2. Minutes:**

* Explicitly specify by appending `minutes`.
* Example: `uint256 time = 5 minutes; // Represents 5 minutes`

#### **3. Hours:**

* Specify by appending `hours`.
* Example: `uint256 time = 2 hours; // Represents 2 hours`

#### **4. Days:**

* Specify by appending `days`.
* Example: `uint256 time = 3 days; // Represents 3 days`

#### **5. Weeks:**

* Specify by appending `weeks`.
* Example: `uint256 time = 4 weeks; // Represents 4 weeks`

### **Conclusion**

Utilizing explicit time units in Solidity promotes a higher level of code quality by enhancing readability and reducing ambiguity. It is a best practice that leads to more understandable and maintainable code by avoiding the pitfalls of magic values. In your journey of smart contract development, consistently applying this practice will prove instrumental in writing robust and efficient contracts.
