Transakcje
Transakcje to podpisane kryptograficznie instrukcje od kont. Konto inicjuje transakcję, aby zaktualizować stan sieci Ethereum. Najprostszą transakcją jest przeniesienie ETH z jednego konta na drugie.
Warunki wstępne
Aby lepiej zrozumieć tę stronę, zalecamy najpierw przeczytanie rozdziału Konta i naszego Wprowadzenia do Ethereum.
Czym jest transakcja?
Transakcja Ethereum odnosi się do działania zainicjowanego przez konto będące własnością zewnętrzną, innymi słowy konto zarządzane przez człowieka, a nie przez kontrakt. Na przykład, jeśli Bob wysyła Alice 1 ETH, na koncie Boba musi się pojawić obciążenie, a na koncie Alice uznanie. Ta zmiana stanu ma miejsce w ramach transakcji.
Schemat zaadaptowany z Ethereum EVM illustrated
Transakcje, które zmieniają stan EVM, muszą być transmitowane na całą sieć. Każdy węzeł może rozesłać prośbę o wykonanie transakcji na EVM; po tym wydarzeniu górnik wykona transakcję i roześle powstałą zmianę stanu do reszty sieci.
Transakcje wymagają opłaty i muszą być wydobyte, aby stały się ważne. Aby uprościć ten przegląd, omówimy opłaty za gaz i wydobycie w innym miejscu.
Przedłożona transakcja zawiera następujące informacje:
recipient
– adres odbiorcy (w przypadku konta z właścicielem zewnętrznym transakcja przekaże wartość. W przypadku konta kontraktu transakcja wykona kod konta)signature
– identyfikator nadawcy. Jest generowany, gdy klucz prywatny nadawcy podpisuje transakcję i potwierdza, że nadawca autoryzował tę transakcjęvalue
– kwota ETH do przelania od nadawcy do odbiorcy (w WEI, wartość nominalna ETH)data
– opcjonalne pole do umieszczenia dowolnych danychgasLimit
– maksymalna ilość jednostek gazu, które mogą zostać zużyte w trakcie transakcji. Jednostki gazu reprezentują kroki obliczeniowegasPrice
– opłata wnoszona przez nadawcę za jednostkę gazu
Gaz jest odniesieniem do obliczeń wymaganych do przetworzenia transakcji przez górnika. Użytkownicy muszą wnieść opłatę za to obliczenie. gasLimit
i gasPrice
określają maksymalną opłatę transakcyjną na rzecz górnika. Więcej o gazie.
Obiekt transakcji będzie wyglądał mniej więcej w ten sposób:
1{2 from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8",3 to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a",4 gasLimit: "21000",5 gasPrice: "200",6 nonce: "0",7 value: "10000000000",8}9Kopiuj
Obiekt transakcji musi być podpisany przy użyciu klucza prywatnego nadawcy. Dowodzi to, że transakcja mogła pochodzić jedynie od nadawcy i nie została wysłana w sposób oszukańczy.
Klient Ethereum, taki jak Geth obsługuje ten proces podpisywania.
Przykład wywołania JSON-RPC:
1{2 "id": 2,3 "jsonrpc": "2.0",4 "method": "account_signTransaction",5 "params": [6 {7 "from": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db",8 "gas": "0x55555",9 "gasPrice": "0x1234",10 "input": "0xabcd",11 "nonce": "0x0",12 "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",13 "value": "0x1234"14 }15 ]16}17Pokaż wszystkoKopiuj
Przykład odpowiedzi:
1{2 "jsonrpc": "2.0",3 "id": 2,4 "result": {5 "raw": "0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",6 "tx": {7 "nonce": "0x0",8 "gasPrice": "0x1234",9 "gas": "0x55555",10 "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0",11 "value": "0x1234",12 "input": "0xabcd",13 "v": "0x26",14 "r": "0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e",15 "s": "0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663",16 "hash": "0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e"17 }18 }19}20Pokaż wszystkoKopiuj
raw
to podpisana transakcja w kodowanym formacie RLPtx
jest podpisaną transakcją w formacie JSON
Dzięki skrótowi podpisu można udowodnić kryptograficznie, że transakcja pochodzi od nadawcy i została przesłana do sieci.
Gaz
Jak już wspomniano, wykonanie transakcji kosztuje gaz. Proste transakcje transferu wymagają 21 000 jednostek gazu.
Więc aby Bob wysłał Alice 1 ETH przy gasPrice
200 Gwei, będzie musiał wnieść następującą opłatę:
1200*21000 = 4 200 000 GWEI2--lub--30,0042 ETH4
Konto Boba zostanie obciążone -1,0042 ETH
Konto Alicji zostanie zasilone +1,0 ETH
Górnik przetwarzający transakcję otrzyma +0,0042 ETH
Gaz jest również potrzebny do każdej interakcji kontraktów inteligentnych.
Schemat zaadaptowany z Ethereum EVM illustrated
Gaz niewykorzystany w transakcji jest zwracany na konto użytkownika.
Cykl życiowy transakcji
Po przesłaniu transakcji nastąpią następujące wydarzenia:
- Po wysłaniu transakcji kryptografia generuje hash:
0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017
- Transakcja jest następnie rozsyłana w sieci i włączana do puli obejmującej wiele innych transakcji.
- Górnik musi wybrać transakcję i umieścić w bloku, aby ją zweryfikować transakcję i uznać za „udaną”.
- Możesz skończyć, oczekując na tym etapie, jeśli sieć jest zajęta i górnicy nie są w stanie nadążyć. Górnicy zawsze będą traktować priorytetowo transakcje z wyższą
GASPRICE
, ponieważ będą mogli zatrzymać opłaty.
- Możesz skończyć, oczekując na tym etapie, jeśli sieć jest zajęta i górnicy nie są w stanie nadążyć. Górnicy zawsze będą traktować priorytetowo transakcje z wyższą
- Twoja transakcja otrzyma również numer potwierdzenia bloku. Jest to liczba bloków utworzonych od bloku, w którym Twoja transakcja została uwzględniona. Im większa liczba, tym większa pewność, że transakcja została przetworzona i rozpoznana przez sieć. Dzieje się tak dlatego, że czasami blok, w którym zawarta była Twoja transakcja, mógł nie trafić do łańcucha.
- Im większy numer potwierdzenia bloku, tym bardziej niezmienna jest transakcja. Tak więc w przypadku transakcji o wyższej wartości pożądane może być więcej potwierdzeń bloków.
Demo wizualne
Zobacz, jak Austin przeprowadzi Cię przez transakcje, gaz i wydobycie.
Dalsza lektura
Znasz jakieś zasoby społeczności, które Ci pomogły? Wyedytuj tę stronę i dodaj je!