An open API service indexing awesome lists of open source software.

https://github.com/mehdikhosa50/yul_solidity

A Comprehensive guide to use of Assembly Language (YUL) in Solidity.
https://github.com/mehdikhosa50/yul_solidity

smart-contracts solidity yul-assembly

Last synced: 8 months ago
JSON representation

A Comprehensive guide to use of Assembly Language (YUL) in Solidity.

Awesome Lists containing this project

README

          

# Solidity Yul Examples
This repository contains a collection of Solidity contracts demonstrating the usage of Yul, Ethereum's intermediate language. These examples show how to work with low-level operations, memory management, storage access, and data manipulation using inline assembly.

# Overview
Yul is an intermediate language that can be compiled to bytecode for different backends. In Ethereum, it's particularly useful for optimization and accessing EVM features that are not directly available in Solidity. This repository provides practical examples of using Yul within Solidity contracts.

# Contract Descriptions
# 1. YulDataTypes.sol
Demonstrates how to work with different data types in Yul, including:

. Basic data type assignments (uint256, address, boolean)
. Hex value handling
. String and bytes32 manipulation
. Memory allocation for strings
. Type conversion between Solidity and Yul

# 2. YulOperations.sol
Showcases various mathematical and logical operations in Yul:

. Arithmetic operations (addition, division)
. Comparison operations
. Modulus calculation
. Prime number checking
. Control flow (if statements, loops)
. Switch-case implementation

# 3. Storage.sol
Illustrates basic storage manipulation using Yul:

. Direct storage access using slots
. Reading from and writing to storage slots
. Storage slot identification for state variables
. Converting between different data representations

# 4. StoragePart2.sol (Storage_BitManipulation.sol)
Focuses on advanced storage operations and bit manipulation:

. Working with packed storage variables
. Bit shifting and masking operations
. Reading and writing partial storage slots
. Offset calculations for packed variables

# 5. StoragePart3.sol (Storage_MappingAndArray.sol)
Demonstrates complex storage patterns with arrays and mappings:

. Fixed and dynamic array handling
. Mapping storage patterns
. Nested mapping operations
. Complex data structure storage layout
. Storage location calculation for arrays and mappings

# 6. Memory.sol (Layout_InMemory.sol)
Explains memory management and layout:

. Memory pointer manipulation
. Struct memory layout
. Array memory management
. Memory allocation patterns
. ABI encoding examples

# Getting Started
bashCopygit clone https://github.com/yourusername/solidity-yul-examples.git

# Copy and paste in #RemixIDE

# Usage
These contracts are primarily educational and demonstrate various Yul programming concepts. They can be used as:

. Reference material for learning Yul
. Examples for implementing low-level optimizations
. Templates for custom low-level implementations
. Study material for understanding EVM storage and memory

# Security Considerations
These contracts contain low-level code that directly manipulates storage and memory. While they are educational, please note:

. Direct storage manipulation can be dangerous in production
. Always thoroughly test any Yul code before deployment
. Some examples may not follow best practices for production use
. Consider security implications when adapting these patterns

# Contributing
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

# License
This project is licensed under the GPL-3.0 License - see the individual contract files for details.

# Resources
For more information about Yul and inline assembly in Solidity:

1. Solidity Documentation - Inline Assembly
2. Yul Documentation
3. Ethereum Yellow Paper

# Acknowledgments
These examples are created for educational purposes and draw from various sources in the Ethereum development community. They are meant to help developers understand low-level EVM operations and optimization techniques.