---
# System prepended metadata

title: 'Optymalizacja gazu w Solidity: jak Yul może zmniejszyć koszty Twoich kontraktów'
tags: [it, "\_yul", Hardhad, open source, solidity, "\_kryptowaluty\_"]

---

# Optymalizacja gazu w Solidity: jak Yul może zmniejszyć koszty Twoich kontraktów, ale ... 

![gas](https://hackmd.io/_uploads/SJ4gmJEHgx.jpg)


Czy zastanawiałeś się, dlaczego nawet proste kontrakty w Solidity potrafią zużywać zaskakująco dużo gazu? W świecie zdecentralizowanych aplikacji (dApps), każda nadmiarowa operacja kosztuje. Na szczęście, kompilator Solidity oferuje narzędzie, które może znacząco zredukować te koszty — tryb Intermediate Representation (IR), znany szerzej jako **Yul**.

---

## Dlaczego czytelny kod nie zawsze oznacza tani kod?

Solidity daje poczucie przewidywalności, ale za tą przejrzystością czasem kryją się niepotrzebne koszty.

**Przykład:**  
Masz kontrakt `Counter` z publiczną zmienną `number`, ustawianą w konstruktorze. Potem tworzysz kontrakt `Timmy`, który dziedziczy po `Counter` i ustawia `number` na 22. Odczytując wartość po wdrożeniu, faktycznie dostajesz `Timmy.number == 22`. Wszystko działa zgodnie z oczekiwaniami… ale w tle kontrakt zużywa więcej gazu, niż byś chciał.

```
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.30;

contract Counter {
    uint256 public number;
    constructor(uint256 starting Number) {
    number = startingNumber;
    }
}

contract Timmy is Counter {
    uint256 timmyNumber = 22;
    constructor() Counter(timmyNumber) {}
}
```

---

## Tryb kompilacji przez Intermediate Representation (IR), czyli Yul

**Yul** to niskopoziomowy język pośredni, którego używa kompilator Solidity w trybie optymalizacji IR. Włączenie tego trybu pozwala kompilatorowi generować bardziej zoptymalizowany kod bajtowy.

### Jak go włączyć?

Wystarczy:
- Ustawić `viaIR: true` w konfiguracji kompilatora (np. `solc`, `foundry.toml`)
- Przekompilować kontrakt i porównać zużycie gazu

**Przykład konfiguracji dla Foundry:**
```toml
[profile.default]
via_ir = true
```

Włąsnie w tym miejscu otrzymujemy to mityczne ALE, bo oto nie zawsze kompilator języka Yul zrobi to co od niego oczekujemy, to akurat jest problemem w zwiazku z czym warto **wszytko dobrze testować.** Błąd ten kompilacji udokumentował [Patrick Collins tu link do jego filmu, gdzie pokazuje, jak to działa. ](https://www.youtube.com/watch?v=95An3N45lLY)

A tu link do człowiek, który to odkrył: 
https://x.com/real_philogy/status/1939651713339658673


---
📲 **Znajdź mnie w sieci:**  
🔴 [YouTube](https://www.youtube.com/@devPepson) &nbsp;|&nbsp;[Telegram](https://web.telegram.org/k/#@xmasnft4you) &nbsp;|&nbsp;[Twitter/X](https://x.com/devPepson) &nbsp;|&nbsp;[GitHub](https://github.com/panpepson) &nbsp;|&nbsp;[wWw](https://trochymiak.net) 🌐

