Основы работы с библиотекой web3, и как отправлять транзакции в блокчейн(на примере Arbitrum)?

Всем привет✋, сегодня я покажу как создавать evm аккаунты, смотреть баланс кошелька и отправлять транзакции в блокчейн на примере арбитрума, если статья вам помогла, буду рад лайку или комментарию)

1.Установка web3

Здесь все просто, для работы web3 нужно установить Node.js, сделать это можно тут, и саму библиотеку web3, для этого заходим в папку проекта и открываем терминал и вводим команду:

$ npm install web3

На этом с установкой все.

2.Создаем EVM аккаунт

Для работы с блокчейном нам нужно импортировать или создать EVM аккаунт.

Создаем:

const {Web3} = require("web3"); //импорт библиотеки const web3 = new Web3("https://arb1.arbitrum.io/rpc"); // вставляем адресс публичной ноды Arbitrum const acc = web3.eth.accounts.wallet.create(1); // создаем console.log(acc);

Адресс публичной ноды можно найти в доках проекта или на chainlist.

Запускаем скрипт:

Основы работы с библиотекой web3, и как отправлять транзакции в блокчейн(на примере Arbitrum)?

Импорт аккаунта с помощью приватного ключа:

const {Web3} = require("web3"); const web3 = new Web3("https://arb1.arbitrum.io/rpc"); const wallet = web3.eth.accounts.privateKeyToAccount("PrivateKey");

3.Проверяем баланс в eth на кошельке

Создадим функцию getBalance:

async function getBalance(address){     var balance = await web3.eth.getBalance(address); // запрашиваем баланс     balance = web3.utils.fromWei(balance, "ether"); // переводим его из wei в eth     console.log(balance); }

Функция асинхронная, потому что метод getBalance занимает время, и поэтому мы прописываем await, чтобы дождаться его завершения.

4.Отправляем транзакцию в блокчейн

Для этого создадим функцию SendEth:

async function SendEth(amount, to_adr){     const gasPrice = await web3.eth.getGasPrice(); // запрашиваем gasPrice     var transaction = { // создаем тело транзакции             "to": to_adr,             "from": wallet.address,             "value": web3.utils.toWei(amount, "ether"), // переводим из eth в wei             "gasLimit": 100000, // gasLimit можно поссмотреть в arbiscan             "gasPrice": gasPrice     }     const signtx = await wallet.signTransaction(transaction); // подписываем транзакцию     const sendtx = await web3.eth.sendSignedTransaction(signtx.rawTransaction); // отправляем     console.log(sendtx.transactionHash);     getBalance(wallet.address); // выводим баланс после отправки }

Я написал такой код для проверки:

const {Web3} = require("web3"); const web3 = new Web3("https://arb1.arbitrum.io/rpc"); const wallet = web3.eth.accounts.privateKeyToAccount("PrivateKey"); async function getBalance(adress){     var balance = await web3.eth.getBalance(adress);     balance = web3.utils.fromWei(balance, "ether");     console.log(balance); } getBalance(wallet.address).then(()=>{     SendEth("0.002", "0x2717EE1B75Fbbf36115dd8aB334DfA9C9048906C"); }); async function SendEth(amount, to_adr){     const gasPrice = await web3.eth.getGasPrice();     var transaction = {             "to": to_adr,             "from": wallet.address,             "value": web3.utils.toWei(amount, "ether"),             "gasLimit": 100000,             "gasPrice": gasPrice        }     const signtx = await wallet.signTransaction(transaction);        const sendtx = await web3.eth.sendSignedTransaction(signtx.rawTransaction);        console.log(sendtx.transactionHash);        getBalance(wallet.address); }

Выводит:

Основы работы с библиотекой web3, и как отправлять транзакции в блокчейн(на примере Arbitrum)?

Посмотрим на транзакцию в arbiscan:

Основы работы с библиотекой web3, и как отправлять транзакции в блокчейн(на примере Arbitrum)?

На этом все, надеюсь смог помочь с решением ваших задач, если кто-то хочет, чтобы я написал продолжение статьи, то ставьте лайк и пишите комментарии, если вам интересна тема web3 и программирования в целом, то можете подписаться на мой тг_канал в котором я буду публиковать часть кода своих проектов и делиться своими мыслями и целями. Всем удачи, надеюсь еще увидимся)))

11
Начать дискуссию