Kalkulacja kosztów transakcji w Ethereum
: środa, 15 maja 2019, 22:40
Ponieważ okresowo pojawiają się wątki dotyczące problemów z transakcjami z ETH postanowiłem napisać po ludzku jak wygląda opłata transakcyjna w Ethereum.
Mam nadzieję, że się przyda.
Tym razem Rafał prostuje Ethereum
Najpierw mała definicja, czym jest mityczny "gas".
Gas jest ilością mocy obliczeniowej (cykli procesora) jakie muszą być wykonane przez EVM (Etehreum Virtual Machine) aby wykonać daną transakcję. Każda operacja (wysłanie ETH, dodawanie, mnożenie, zapis danych w pamieci, odczyt tych danych itd) ma określoną "wagę" - czyli właśnie ilość cykli EVM. Ponieważ wykonanie kontraktu musi być niezależnie powtórzone na każdym pełnym węźle ETH, istnieje limit cykli EVM na blok jaki mogą generować wszystkie transakcje dołączane do bloku (block gas limit). Może się więc zdarzyć tak, że naszego "uber-kontraktu" nie będzie można użyć, bo jest zbyt skomplikowany ;]
Cała kalkulacja kosztów transakcji w ETH jest generalnie przekombinowane, zwłaszcza w sytuacji gdy używamy kontraktów.
Po pierwsze, musimy znać ilość "gas" jaka jest potrzebna do wykonania kontraktu. Jeżeli jest to jakiś token i nie jesteśmy jedynymi/pierwszymi użytkownikami to można zajrzeć etherscanem na inne transakcje i odczytać tą wartość. To będzie "gas limit" naszej transakcji - ile maksymalnie jesteśmy skłonni kupić mocy obliczeniowej od EVM. W innym przypadku (nie znając estymacji) musimy dać limit z kosmosu i modlić się żeby starczyło, o czym na końcu.
Drugi element to cena gazu - "gas price". Ta dla odmiany zależy od aktualnej sytuacji na rynku i możemy ją sprawdzić np. na ethergasstation.
Trzeci element to koszt samej transakcji (fee) zależne od wielkości transakcji, i również wyrażony w gas. Ten występuje zawsze, i zależy od transakcji - jeżeli np wywołujemy kontrakt z wieloma parametrami to parametry te też "ważą" jakieś bajty danych i przez to kosztują. Najlżejsze są oczywiście "zwykłe" transakcje wysyłające ETH, bo muszą zawierać tylko ilość, adres odbiorcy i podpis nadawcy.
Mamy więc "transaction cost" i "execution cost" wyrażony w "gas" i mnożymy go przez "gas price". Otrzymujemy max wartość w ETH jaką jesteśmy skłonni zapłacić za wykonanie transakcji. Musimy więc zawsze mieć jakiś zapas.
I teraz najlepsze.
To, czy transakcja w ogóle będzie dołączona do bloku zależy od tego, czy nasza cena gas jest odpowiednio wysoka. Jeżeli nie - możemy czekać tygodniami, jak było przy krypto kotkach.
A najlepsze z najlepszych jest to, że jeżeli przeszacujemy i damy za mały gas limit przy odpowiednio wysokim gas price, to transakcja zostanie dołączona do bloku, zapłacimy całe ETH jakie przeznaczyliśmy na wykonanie transakcji ale kontrakt się nie wykona xD
Dziękujemy za skorzystanie z linii ETH dla opornych ;]
Mam nadzieję, że się przyda.
Tym razem Rafał prostuje Ethereum
Najpierw mała definicja, czym jest mityczny "gas".
Gas jest ilością mocy obliczeniowej (cykli procesora) jakie muszą być wykonane przez EVM (Etehreum Virtual Machine) aby wykonać daną transakcję. Każda operacja (wysłanie ETH, dodawanie, mnożenie, zapis danych w pamieci, odczyt tych danych itd) ma określoną "wagę" - czyli właśnie ilość cykli EVM. Ponieważ wykonanie kontraktu musi być niezależnie powtórzone na każdym pełnym węźle ETH, istnieje limit cykli EVM na blok jaki mogą generować wszystkie transakcje dołączane do bloku (block gas limit). Może się więc zdarzyć tak, że naszego "uber-kontraktu" nie będzie można użyć, bo jest zbyt skomplikowany ;]
Cała kalkulacja kosztów transakcji w ETH jest generalnie przekombinowane, zwłaszcza w sytuacji gdy używamy kontraktów.
Po pierwsze, musimy znać ilość "gas" jaka jest potrzebna do wykonania kontraktu. Jeżeli jest to jakiś token i nie jesteśmy jedynymi/pierwszymi użytkownikami to można zajrzeć etherscanem na inne transakcje i odczytać tą wartość. To będzie "gas limit" naszej transakcji - ile maksymalnie jesteśmy skłonni kupić mocy obliczeniowej od EVM. W innym przypadku (nie znając estymacji) musimy dać limit z kosmosu i modlić się żeby starczyło, o czym na końcu.
Drugi element to cena gazu - "gas price". Ta dla odmiany zależy od aktualnej sytuacji na rynku i możemy ją sprawdzić np. na ethergasstation.
Trzeci element to koszt samej transakcji (fee) zależne od wielkości transakcji, i również wyrażony w gas. Ten występuje zawsze, i zależy od transakcji - jeżeli np wywołujemy kontrakt z wieloma parametrami to parametry te też "ważą" jakieś bajty danych i przez to kosztują. Najlżejsze są oczywiście "zwykłe" transakcje wysyłające ETH, bo muszą zawierać tylko ilość, adres odbiorcy i podpis nadawcy.
Mamy więc "transaction cost" i "execution cost" wyrażony w "gas" i mnożymy go przez "gas price". Otrzymujemy max wartość w ETH jaką jesteśmy skłonni zapłacić za wykonanie transakcji. Musimy więc zawsze mieć jakiś zapas.
I teraz najlepsze.
To, czy transakcja w ogóle będzie dołączona do bloku zależy od tego, czy nasza cena gas jest odpowiednio wysoka. Jeżeli nie - możemy czekać tygodniami, jak było przy krypto kotkach.
A najlepsze z najlepszych jest to, że jeżeli przeszacujemy i damy za mały gas limit przy odpowiednio wysokim gas price, to transakcja zostanie dołączona do bloku, zapłacimy całe ETH jakie przeznaczyliśmy na wykonanie transakcji ale kontrakt się nie wykona xD
Dziękujemy za skorzystanie z linii ETH dla opornych ;]