Transakcje
Transakcje to podpisane kryptograficznie instrukcje od kont. Konto inicjuje transakcję, aby zaktualizować stan sieci nexus. 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 nexus.
Czym jest transakcja?
Transakcja nexus 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 nexus 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 nexus, 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
rawto podpisana transakcja w kodowanym formacie RLPtxjest 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 nexus 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!