Autor: Rosario Borgesi
Tłumaczenie: Huohuo, potoczny blockchain
Blockchain Ethereum zrewolucjonizował zdecentralizowane aplikacje i inteligentne kontrakty, ale każda transakcja wiąże się z opłatami za gaz Ethereum. W tym przewodniku odkryjemy tajemnice opłat za gaz w Ethereum i poznamy ich podstawowe zasady, metody kalkulacji, czynniki wpływające na koszty oraz skuteczne strategie optymalizacji transakcji przy jednoczesnej kontroli kosztów.
1. Zrozum gaz Ethereum
Gaz jest paliwem do transakcji i realizacji inteligentnych kontraktów na blockchainie Ethereum. Reprezentuje wysiłek obliczeniowy wymagany do przetworzenia tych operacji i jest wyceniany w małych nominałach eteru zwanych gwei (1 gwei = 10^-9 ETH).
Innymi słowy, gaz jest jednostką miary pracy obliczeniowej, równoważną pewnej ilości eteru.
Dlatego opłaty za gaz są kluczowe w ekosystemie Ethereum:
1) Alokacja zasobów: Opłaty za gaz pełnią funkcję mechanizmu alokacji zasobów sieciowych. Wymagając od użytkowników płacenia za wykorzystywaną moc obliczeniową i przestrzeń dyskową, sieć zapewnia sprawiedliwy dostęp i zapobiega nadużywaniu zasobów.
2) Zapobiegaj spamowi sieciowemu: Bez opłat za gaz złośliwi aktorzy mogliby zalać sieć transakcjami spamowymi, przeciążając system i spowalniając legalne transakcje. Opłaty za gaz sprawiają, że spamowanie w sieci jest kosztowne i niepraktyczne finansowo.
3) Motywowanie górników: Opłaty za gaz zachęcają górników do uwzględniania transakcji w blokach. Górnicy traktują priorytetowo transakcje z wyższymi opłatami za gaz, zachęcając użytkowników do oferowania konkurencyjnych opłat za terminowe przetwarzanie transakcji.
4) Bezpieczeństwo sieci: Opłaty za gaz przyczyniają się do bezpieczeństwa sieci Ethereum. Zapewniają prawidłową realizację transakcji i inteligentnych kontraktów, wymagając od użytkowników zapłaty za poszczególne kroki obliczeniowe. Blokuje to potencjalne ataki i luki w zabezpieczeniach.
5) Skalowalność i wydajność: dodając koszt do każdej operacji, opłaty za gaz zachęcają programistów do pisania wydajnego i zoptymalizowanego kodu. Skoncentrowanie się na wydajności ma kluczowe znaczenie dla skalowania sieci, ponieważ zachęca do stosowania najlepszych praktyk i zmniejsza obciążenie łańcucha bloków.
6) Model ekonomiczny: Opłaty za gaz stanowią integralną część modelu ekonomicznego Ethereum. Promują zrównoważony ekosystem, w którym górnicy otrzymują wynagrodzenie za swoje wysiłki, promując rozwój i stabilność sieci.
2. Składniki opłaty gazowej
Poznaj główne składniki składające się na opłaty za gaz Ethereum:
1) Opłata podstawowa: Ustalona w umowie, musisz zapłacić co najmniej tę kwotę, aby transakcja została uznana za ważną.
2) Opłata priorytetowa: to napiwek dodawany do opłaty podstawowej, aby Twoja transakcja była atrakcyjna dla walidatorów, tak aby zdecydowali się uwzględnić ją w następnym bloku.
Transakcja, za którą pobierana jest jedynie opłata podstawowa, jest technicznie ważna, ale jest mało prawdopodobne, że zostanie uwzględniona, ponieważ nie stanowi zachęty dla walidatorów do jej wyboru.
Opłata za priorytet zależy od wykorzystania sieci w momencie wysyłania transakcji: jeśli jest duże zapotrzebowanie, może być konieczne ustawienie wyższej opłaty za priorytet, ale gdy jest mniejsze zapotrzebowanie, możesz zapłacić mniej.
3. Kalkulacja opłaty transakcyjnej
Załóżmy na przykład, że Jordan musi zapłacić Taylorowi 1 ETH. Transfer ETH wymaga 21 000 jednostek gazu, a opłata podstawowa wynosi 10 gwei. Jordan dołączył napiwek 2 gwei.
Całkowity koszt wynosi obecnie:
jednostki zużytego gazu * (opłata podstawowa + opłata priorytetowa)
Opłata podstawowa to wartość ustalona przez protokół, a opłata priorytetowa to wartość ustalona przez użytkownika jako monit walidatora.
21 000 * (10 + 2) = 252 000 wei (0,000252 ETH).
Kiedy Jordan wyśle pieniądze, z konta Jordana zostanie pobrane 1,000252 ETH. Taylor otrzyma 1.0000 ETH. Walidatorzy otrzymują napiwek w wysokości 0,000042 ETH. Opłata 0,00021 ETHbase zostaje spalona, co oznacza, że zostanie wycofana z obiegu.
4. Odczytuj i zapisuj dane
W sieci Ethereum rozróżnia się zapisywanie danych w sieci i odczytywanie danych z sieci, a to rozróżnienie odgrywa ważną rolę w sposobie pisania aplikacji. Ogólnie rzecz biorąc, zapisywanie danych nazywa się transakcją, a odczytywanie danych nazywa się wywołaniem.
1) Transakcja: Transakcja zmienia stan sieci podczas zapisywania lub zmiany danych. Może to być tak proste, jak przesłanie eteru na inne konto lub tak złożone, jak wykonanie funkcji kontraktu lub dodanie nowego kontraktu do sieci. Aby dokonać transakcji, musimy uiścić opłaty za gaz, a ich przetworzenie zajmuje trochę czasu.
2) Wywołania: Wywołania mogą być używane do wykonywania kodu w sieci, ale nie powodują trwałej zmiany danych. Służą głównie do odczytu danych, więc działają za darmo (nie zużywają gazu). Kiedy wykonasz funkcję kontraktu, wywołując ją, natychmiast otrzymasz wartość zwracaną.
5. Przedmioty transakcji
Możesz określić ilość gazu, jaką jesteś skłonny zapłacić przy składaniu transakcji, ustawiając następujące parametry w obiekcie transakcji:
1) GasLimit: Maksymalna ilość jednostek gazu, jaką może zużyć transakcja. EVM określa jednostki gazu wymagane na każdym etapie obliczeń.
2) maxPriorityFeePerGas: Maksymalna cena zużytego gazu jako wskazówka weryfikacyjna.
3) maxFeePerGas: Maksymalna opłata za jednostkę Gazu, jaką jesteś skłonny zapłacić za transakcję (w tym baseFeePerGas i maxPriorityFeePerGas)
6. Aktualizacja w Londynie (EIP-1559)
Przed modernizacją w Londynie opłaty obliczano bez rozróżnienia na opłaty podstawowe i priorytetowe.
W obiekcie transakcji możemy ustawić:
1) GasLimit/startGas: Maksymalna ilość jednostki gazu, jaką może zużyć transakcja. Tak samo jak poprzednio.
2) Cena gazu: Ilość wei, jaką jesteśmy skłonni zapłacić za jednostkę gazu.
Załóżmy, że Alicja musi zapłacić Bobowi 1 ETH. W transakcji limit gazu wynosi 21 000 jednostek, a cena gazu 200 gwei.
Całkowity koszt to: Jednostki gazu (limit) * Cena gazu za jednostkę, która wynosi 21 000 * 200 = 4 200 000 gwei0,0042 ETH
7. Naliczanie prowizji w transakcjach złożonych
Aby lepiej zrozumieć koszty transakcji, możemy przyjrzeć się kodowi operacji EVM. Obliczmy zatem koszt wykonania tej funkcji:
Funkcja doMath ( uint a, uint b ) { a + b; b - a; a * b; a== 0;}
a + b (ADD) kosztuje 3 jednostki gazowe b - a (SUB) kosztuje 3 jednostki gazowe a * b (MUL) kosztuje 5 jednostek gazowych a == 0 (EQ) kosztuje 3 jednostki gazowe
Zatem całkowity koszt tej transakcji to 14 jednostek gazowych.
Ważne jest, aby zrozumieć, że jeśli w obiekcie transakcji określimy gasLimit równy 6, zostaną wykonane tylko dwie pierwsze operacje, po czym transakcja zostanie zatrzymana, a uiszczona opłata za gaz nie zostanie przywrócona, ponieważ musimy zapłacić za pracę zrobione .
Jeśli więc musimy ustawić parametr gasLimit na wystarczającą wartość, aby nasza transakcja mogła zostać zrealizowana bez utraty naszego eteru.
W tym konkretnym przykładzie obliczenie rachunku za gaz jest stosunkowo proste. Jednakże w przypadku bardziej złożonych funkcji, szczególnie tych obejmujących pętle zmiennych o różnych rozmiarach, określenie kosztów gazu z wyprzedzeniem może być wyzwaniem.
W tym przypadku możemy skorzystać z funkcjonalności, jakie zapewniają dwie najsłynniejsze biblioteki programistyczne EstimGas: ethers.js i web3.js. Funkcja ta pozwala nam oszacować koszt gazu związany z wykonaniem określonej funkcji na blockchainie Ethereum.
Warto jednak przypomnieć, że zawsze dobrą praktyką jest ustawienie gasLimit i maxFeePerGas, aby uniknąć wykonywania transakcji, które pochłoną zbyt dużo eteru.
8. Strategie redukcji opłat za gaz 1) Wykorzystaj warstwę 2
Warstwa 2 to pomocnicza platforma lub protokół zbudowany na bazie łańcucha bloków Ethereum. Rozwiązania te mają na celu zwiększenie skalowalności i optymalizację szybkości transakcji poprzez przetwarzanie większości transakcji poza głównym łańcuchem Ethereum (zwanym warstwą 1). Warstwa 1 obejmuje podstawowy łańcuch bloków Ethereum, w przypadku którego koszty transakcji są wysokie i mogą wystąpić problemy ze skalowalnością ze względu na duży popyt.
Do różnych metod warstwy 2 zaliczają się rollupy stosowane w Arbitrum i Optimism.
Pakiety zbiorcze łączą wiele transakcji w jedną transakcję, kompresując dane i przechowując je w sieci głównej Ethereum. To znacznie zmniejsza opłaty za gaz i poprawia skalowalność, ponieważ pojedyncza transakcja w sieci głównej może reprezentować dużą liczbę transakcji poza łańcuchem.
2) Uruchamiaj w okresach zmniejszonego przeciążenia sieci
Jeśli chcemy działać na pierwszej warstwie, rozwiązanie oszczędzające koszty wydaje się oczywiste: transakcje musimy realizować wtedy, gdy sieć jest mniej obciążona.
W rzeczywistości blockchain Ethereum pozwala tylko na około 20–40 transakcji na sekundę (TPS) (co stanowi całkowitą liczbę wszystkich użytkowników Ethereum); po osiągnięciu limitu użytkownicy zmuszeni są ze sobą konkurować, aby uzyskać transakcje, co przyczyny Rosną opłaty.
Aby sprawdzić obciążenie sieci, możemy użyć Etherscan.
3) Minimalizuj transakcje
Każda transakcja na blockchainie Ethereum wiąże się z pewnym kosztem, zwanym opłatą za gaz. Aby zmniejszyć te opłaty, w miarę możliwości należy połączyć wiele operacji w jedną transakcję. Na przykład połączenie wielu transferów tokenów lub interakcji z inteligentnymi kontraktami w jedną transakcję może znacznie obniżyć koszty ogólne.
4) Zoptymalizuj złożoność kodu
Transakcje Ethereum polegają na wykonaniu kodu przechowywanego na blockchainie. Złożony i nieefektywny kod wymaga większych zasobów obliczeniowych, co skutkuje wyższymi opłatami za gaz. Optymalizując i upraszczając kod, możesz zmniejszyć zużycie gazu potrzebnego do wykonania. Obejmuje to wydajne praktyki kodowania, minimalizację zbędnych obliczeń i wykorzystanie wydajnych technik programowania.
5) Energooszczędny inteligentny kontrakt
Przy opracowywaniu inteligentnych kontraktów istotne jest zaprojektowanie ich w sposób minimalizujący zużycie gazu. Obejmuje to unikanie niepotrzebnych operacji przechowywania, optymalizację pętli i zmniejszenie złożoności logiki kontraktu. Podczas opracowywania należy wykorzystywać narzędzia i najlepsze praktyki optymalizacji gazu.
9. Wniosek
Podsumowując, opłaty za gaz są ważną częścią Ethereum, utrzymują integralność sieci, zachęcają do prawidłowego użytkowania, zapewniają bezpieczeństwo i wspierają skalowalność, a wszystko to razem pomaga zbudować wydajną i zrównoważoną sieć blockchain.
W tym artykule omawiamy kalkulację i szacowanie opłat za gaz, zapewniając wgląd w różne strategie mające na celu złagodzenie ich skutków. Stosując techniki optymalizacji, wykorzystując rozwiązania warstwy 2 i wdrażając oszczędzający gaz inteligentny kod kontraktowy, użytkownicy i programiści mogą skutecznie obniżyć koszty transakcji i zwiększyć ogólną wydajność aplikacji w sieci Ethereum.
Dzięki głębszemu zrozumieniu opłat za gaz i praktycznych strategii zarządzania nimi, możesz teraz poruszać się po środowisku Ethereum i optymalizować swoje wysiłki związane z kodowaniem. Udanego kodowania i niech Twoje interakcje w Ethereum będą zarówno opłacalne, jak i innowacyjne!
