Salt la conținutul principal

Sending Transactions Using Web3

tranzacțiiweb3.jsalchemy
Începător
Elan Halpern
Documentație Alchemy(opens in a new tab)
4 noiembrie 2020
9 minute de citit minute read

This is a beginner friendly guide to sending Ethereum transactions using web3. Există trei etape principale pentru a trimite o tranzacție în blockchain-ul Ethereum: crearea, semnarea și difuzarea. Le vom parcurge pe toate trei, în speranța că vom răspunde tuturor întrebărilor pe care le puteți avea! In this tutorial, we'll be using Alchemy(opens in a new tab) to send our transactions to the Ethereum chain. You can create a free Alchemy account here(opens in a new tab).

NOTE: This guide is for signing your transactions on the backend for your app, if you want to integrate signing your transactions on the frontend, check out integrating Web3 with a browser provider(opens in a new tab).

Noțiuni de bază

Ca majoritatea dezvoltatorilor de blockchain la început de drum, poate aţi făcut câteva cercetări despre cum să trimiteți o tranzacție (ar trebui să fie destul de simplu) și aţi nimerit într-o multitudine de ghiduri, fiecare spunând lucruri diferite, după care aţi rămas oarecum copleșit și încurcat. Dacă vă aflați într-o astfel de situație, nu vă faceți griji; cu toții am trecut prin aceasta la un moment dat! De aceea, înainte de a începe, haideți să lămurim câteva lucruri:

1.Alchemy nu stochează cheile dvs. private

  • Acest lucru înseamnă că Alchemy nu poate semna și trimite tranzacții în numele dumneavoastră. Aceasta din motive de securitate. Alchemy nu vă va solicita niciodată să vă partajați cheia privată și nu ar trebui să o partajați niciodată cu un nod găzduit (sau cu oricine altcineva).
  • You can read from the blockchain using Alchemy’s core API, but to write to it you’ll need to use something else to sign your transactions before sending them through Alchemy (this is the same for any other node service).

2.Ce este un „semnatar”?

3.De ce trebuie să-mi semnez tranzacțiile?

  • Orice utilizator care dorește să trimită o tranzacție în rețeaua Ethereum trebuie să semneze tranzacția (folosindu-şi cheia privată), pentru a valida în acest fel că persoana care a iniţiat tranzacţia este cea care pretinde a fi.
  • Este extrem de important să vă protejați această cheie privată, deoarece accesul la ea oferă control total asupra contului Ethereum, permițând (atât dvs., cât și oricărei alte persoane cu acces la ea) efectuarea de tranzacții în numele dvs.

4.Cum pot să-mi protejez cheia privată?

  • Sunt mai multe moduri de a vă proteja cheia privată și de a o utiliza pentru a trimite tranzacții. În acest tutorial vom folosi un fișier .env. Totuși, puteți utiliza și un furnizor separat care stochează chei private, puteți folosi un fișier de depozitare de chei (keystore) sau alte opțiuni.

5. Care este diferența dintre eth_sendTransaction și eth_sendRawTransaction?

eth_sendTransaction și eth_sendRawTransaction sunt amândouă funcții API Ethereum care transmit o tranzacție către rețeaua Ethereum, pentru ca aceasta să fie adăugată la un bloc viitor. Acestea diferă prin modul de gestionare a semnării tranzacțiilor.

Atunci când utilizați web3, este accesat eth_sendRawTransaction prin apelarea funcției „web3.eth.sendSignedTransaction”(opens in a new tab).

This is what we will be using in this tutorial.

6.Ce este biblioteca web3?

În regulă, acum că am eliminat câteva dintre aceste întrebări, haideți să trecem la tutorial. Feel free to ask questions anytime in the Alchemy discord(opens in a new tab)!

NOTE: This guide requires an Alchemy account, an Ethereum address or MetaMask wallet, NodeJs, and npm installed. Daca nu, urmați acești pași:

  1. Creați un cont gratuit Alchemy(opens in a new tab)
  2. Create MetaMask account(opens in a new tab) (or get an Ethereum address)
  3. Urmați aceste etape pentru a instala „NodeJs” și „NPM”(opens in a new tab)

Etapele de trimitere a tranzacției dvs.

1.Creați o aplicație Alchemy pe Rinkeby testnet

Navigați la Tabloul de bord Alchemy(opens in a new tab) și creați o nouă aplicație, alegând ca reţea Rinkeby (sau orice alt testnet).

2.Solicitați ETH de la „faucet-ul” Rinkeby

Follow the instructions on the Alchemy Rinkeby faucet(opens in a new tab) to receive ETH. Make sure to include your Rinkeby Ethereum address (from MetaMask) and not another network. After following the instructions, double-check that you’ve received the ETH in your wallet.

3. Creați un nou director pentru proiect și intrați în el prin cd

Creați un nou director pentru proiect din linia de comandă (terminal pentru mac-uri) și navigați în el:

1mkdir sendtx-example
2cd sendtx-example

4.Instalați Alchemy Web3 (sau orice bibliotecă web3)

Executați următoarea comandă în directorul proiectului dvs. pentru a instala Alchemy Web3(opens in a new tab):

1npm install @alch/alchemy-web3

5.Instalați „dotenv”

Vom folosi un fișier „.env” pentru a stoca în siguranță cheia API și cheia privată.

1npm install dotenv --save

6.Creați fișierul „.env”

Create a .env file in your project directory and add the following (replacing “your-api-url" and "your-private-key")

1API_URL = "your-api-url"
2PRIVATE_KEY = "your-private-key"
Don't commit .env! Please make sure never to share or expose your .env file with anyone, as you are compromising your secrets in doing so. If you are using version control, add your .env to a gitignore(opens in a new tab) file.

7. Creați fișierul sendTx.js

Excelent, acum că avem datele noastre sensibile protejate într-un fișier „.env”, să începem codarea. Pentru exemplul nostru de trimitere a unei tranzacţii, vom trimite ETH înapoi la „faucet-ul” Rinkeby.

Creați un fișier sendTx.js, care este locul în care vom configura și trimite tranzacţia pe care am luat-o drept exwmplu și adăugați-i următoarele linii de cod:

1async function main() {
2 require('dotenv').config();
3 const { API_URL, PRIVATE_KEY } = process.env;
4 const { createAlchemyWeb3 } = require("@alch/alchemy-web3");
5 const web3 = createAlchemyWeb3(API_URL);
6 const myAddress = '0x610Ae88399fc1687FA7530Aac28eC2539c7d6d63' //TODO: replace this address with your own public address
7
8 const nonce = await web3.eth.getTransactionCount(myAddress, 'latest'); // nonce starts counting from 0
9
10 const transaction = {
11 'to': '0x31B98D14007bDEe637298086988A0bBd31184523', // faucet address to return eth
12 'value': 1000000000000000000, // 1 ETH
13 'gas': 30000,
14 'nonce': nonce,
15 // optional data field to send message or execute smart contract
16 };
17
18 const signedTx = await web3.eth.accounts.signTransaction(transaction, PRIVATE_KEY);
19
20 web3.eth.sendSignedTransaction(signedTx.rawTransaction, function(error, hash) {
21 if (!error) {
22 console.log("🎉 The hash of your transaction is: ", hash, "\n Check Alchemy's Mempool to view the status of your transaction!");
23 } else {
24 console.log("❗Something went wrong while submitting your transaction:", error)
25 }
26 });
27}
28
29main();
Afișează tot

Be sure to replace the address on line 6 with your own public address.

Now, before we jump into running this code, let's talk about some of the components here.

A Note on data There are a two main types of transactions that can be sent in Ethereum.

8. Executați codul folosind node sendTx.js

Navigate back to your terminal or command line and run:

1node sendTx.js

9.Vedeți-vă tranzacția în Mempool

Open up the Mempool page(opens in a new tab) in your Alchemy dashboard and filter by the app you created to find your transaction. Aici este locul unde putem urmări tranziția tranzacției noastre de la starea de așteptare la starea minată (dacă are succes) sau la starea abandonată dacă nu are succes. Aveţi griijă să activaţi opțiunea „All” (Toate), ca să captați tranzacțiile „minate”, „în așteptare” și „abandonate”. Puteți de asemenea să vă căutați tranzacția uitându-vă după tranzacțiile trimise la adresa 0x31b98d14007bdee637298086988a0bbd31184523.

Pentru a vă vedea detaliile tranzacției odată ce aţi găsit-o, selectați „hash-ul tx”, ceea ce ar trebui să vă conducă să vizualizaţi ceva de genul:

Mempool watcher screenshot

Din acest punct, vă puteţi vizualiza tranzacția pe Etherscan făcând clic pe pictograma încercuită cu roșu!

Yippieeee! Tocmai ați trimis prima dvs. tranzacție Ethereum folosind Alchemy 🎉

For feedback and suggestions about this guide, please message Elan on Alchemy’s Discord(opens in a new tab)!

Originally published at https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy(opens in a new tab)

Ultima modificare: @nhsz(opens in a new tab), 15 august 2023

A fost util acest tutorial?