Введение

Одна из проблем, связанных с технологией блокчейн, заключается в том, что вам нужен узел для отправки транзакций, в случае Ethereum наиболее часто используемым узлом является infura.io, вы можете подключиться к этому узлу, и он будет запускать web3 или другой протокол Ethereum. определенный код в сети по вашему выбору.

Поскольку бесплатная версия infura.io не предлагает необходимого количества вызовов методов для больших проектов, иногда лучше использовать собственный локальный узел, что на самом деле можно сделать с помощью простого дешевого сервера.

Прежде чем мы развернем наш контракт в основной сети Ethereum, будет лучше попробовать его с поддельным эфиром в тестовой сети. В этом руководстве мы создадим локальный узел Ropsten и отправим транзакции с нашего узла.

Представляем Гета

Geth — одна из реализаций протокола Ethereum (подробнее здесь).

В двух словах, Geth — это инструмент для работы с вашим собственным узлом Ethereum.

Когда вы загружаете сеть блокчейна, вам необходимо указать сеть, протоколы RPC и режим синхронизации.

Итак, мы инициализируем geth как:

geth --ropsten --datadir ropsten-testnet --rpc --rpcapi eth,web3,net --syncmode light

Это создает сеанс geth со следующими параметрами:

--ropsten: Tells geth to connect and download the Ropsten test network.
--datadir ropsten-testnet: Tells geth to download the network to the folder “ropsten-testnet” and if the folder doesn’t exist create a new one.
--rpc: Enables the HTTP-RPC server so we can connect to this node.
--rpcapi: Enable only certain RPC APIs for the node, in this case, we enabled:
eth: Enables control of the Ethereum interface in the node.
web3: Enable web3 calls.
net: Enables the connection to the node from a web protocol (Like a web browser).
--syncmode light: Sets the synchronization of the network to light mode (The fastest synchronization).

Типы синхронизации:

Когда мы синхронизируем наш узел, у нас также есть возможность указать, какой тип синхронизации он будет иметь.

Полный: получает каждый блок и заголовок от генезиса до последнего состояния и проверяет их. Этот тип узла является самым большим, и для его полной синхронизации могут потребоваться недели или месяцы, также потребуется много времени. дисковое пространство.

Быстро: то же, что и полное, но не обрабатывает транзакции, пока не получит текущий блок 64, затем начинает проверять транзакции, что также займет некоторое время и потребует много места на диске.

Light: получает только текущее состояние. Чтобы проверить или отправить транзакции, он ищет, где находится учетная запись или контракт (также называется поиском дерева с этими данными).

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

Синхронизация нашего узла

Как только вы выполните эту команду, блокчейн начнет загружаться в указанную папку (в данном случае ropsten-testnet), просто держите терминал открытым, чтобы вы могли поддерживать синхронизацию в любое время.

После этого вы можете подключить сеанс geth к вашему локальному узлу, на котором запущено geth attach http://localhost:8545. Это запустит интерпретатор JavaScript с командами geth для управления вашим узлом.

Теперь попробуйте запустить eth.syncing, чтобы увидеть, закончилась ли синхронизация вашего узла, если он все еще синхронизируется, он вернет ход синхронизации, а если синхронизация завершилась, он вернет false.

Итак, давайте попробуем запустить eth.syncing, пока Geth все еще синхронизирует наш узел.

Теперь, когда мы знаем, что Geth все еще синхронизирует нашу ноду, давайте подождем пару минут и посмотрим, что получится на выходе.

Итак, теперь, когда Geth вернул false, наша синхронизация завершена, но опять же, блокчейн постоянно растет, поэтому у нас должен быть открыт наш клиент Geth, но вы можете закрыть консоль Geth, если вы с ней не работаете.

Использование web3.py для отправки транзакции токена

Теперь, когда наш локальный узел работает, давайте отправим транзакцию токена ERC-20 с одной учетной записи на другую, я сделал небольшой скрипт, который делает это.

(Также вы можете увидеть смарт-контракт на etherscan.io)

Я спрятал закрытый ключ из соображений безопасности, а ABI контракта — из соображений удобочитаемости.

Теперь, когда у нас есть скрипт web3, давайте отправим 100 токенов на другую учетную запись.

Мы запускаем скрипт, и 100 токенов будут отправлены с учетной записи 0x82528495Dc31c3405f55Dec197c6bc3bf2066457 на 0xfFb72633c3b9a2178220D38de3F9Fd8E1b867b3bпросто с помощью нашего узла localhost light.

Так оно и было.

Вы можете просматривать транзакции со счета отправителя и счета получателя.

Вывод

Большинство разработчиков Эфириума используют Geth с быстрой синхронизацией для создания собственного узла, синхронизация которого занимает довольно много времени (может даже месяцами), в большинстве случаев требуется действительно большой SSD и много оперативной памяти, что может привести к очень дорогой сервер.

Вы также можете использовать infura.io, отличный сервис, в котором вы можете иметь узел, но иногда он не масштабируется, если ваш проект большой.

Использование синхронизации в облегченном режиме в Geth позволяет создать очень маленький узел почти за короткое время, и без необходимости использовать слишком много оперативной памяти или твердотельного накопителя, вы даже можете использовать его на небольшом сервере.

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