Учебные ноты Go-Ethereum (1)

Node.js Go Linux Эфириум

предисловие

В этой статье кратко рассказывается об использовании go-ethereum для подключения основной сети и тестовой сети Ethereum, а также некоторые основные инструкции по разработке.Она посвящена тому, как построить частную сеть Ethereum.Что касается разработки приложений Ethereum, если случайно, об этом будет рассказано в следующей статье.

Эта статья содержит материалы по настройке и описанию параметров, на понимание и систематизацию которых автор потратил много сил, и надеюсь, что она сможет помочь вам, коллеги-даосы.

Установить

Платформы операционных систем, на которые можно установить Go Ethereum, — это Mac OS X, Windows и Linux/Unix. Подробнее см.Installation Instructions.

Вот процесс установки для сборки из исходного кода go-ethereum в Linux. Официально упомянутые платформы Linux/Unix включают Ubuntu, Arch и FreeBSD. Возьмите Ubuntu в качестве примера здесь.

Подготовка среды компиляции

Требования к среде компиляцииGoиКомпилятор C. Способ установки следующий:

apt-get install -y build-essential golang

Получите исходный код и скомпилируйте его

Получить исходный код

Перейдите в каталог, в который вы хотите скомпилировать исходный код go-ethereum, и выполните команду:

git clone https://github.com/ethereum/go-ethereum

Приведенная выше команда клонирует код основной ветки go-ethereum, который является кодом непрерывной разработки.Если вы хотите использовать код выпуска, см.go-ethereum release. Вот последний код релиза на тот моментv1.8.7Например:

  1. скачать код
wget https://github.com/ethereum/go-ethereum/archive/v1.8.7.tar.gz
  1. распаковывать
tar zxvf v1.8.7.tar.gz

Переместите разархивированный код в каталог, где вы собираетесь скомпилировать исходный код go-ethereum.

Скомпилируйте исходный код

Когда вы подготовили исходный код go-ethereum, войдите в каталог верхнего уровня проекта исходного кода go-ethereum и выполните команду:

make geth

(рекомендовать), если вы хотите скомпилировать все инструменты, выполните:

make all

После компиляции все инструменты находятся вbuild/binНайденные в каталоге, выньте эти бинарные файлы и поместите их в выбранный вами каталог установки, или поместите их в исходное место, здесь я положил их в/opt/xingweidong/eth/binСправочник, затем установите переменные системы среды на основе ваших предпочтений, добавьте следующее:

export ETH_HOME=/opt/xingweidong/eth
export PATH=$PATH:$ETH_HOME/bin

не забудьте использоватьsource /etc/profileИли обновите информацию о переменной среды любым другим способом.

беги гет

Команда geth, основной клиент Ethereum CLI, является точкой входа в сеть Ethereum (основную, тестовую или частную сеть) с возможностью действовать как полный узел (по умолчанию), архивный узел (сохранять все исторические данные) или работает узел облегченного узла (поиск данных в реальном времени). Он может использоваться другими процессами в качестве шлюза в сеть Ethereum через конечные точки JSON RPC, открытые поверх транспортных протоколов HTTP, WebSocket или IPC.

Совет: просмотрите все параметры командной строки geth, используяgeth --helpили просмотретьCLI Wiki page.

Полный узел главной сети Ethereum

Пока что в основном люди хотят просто взаимодействовать с сетью Ethereum: создавать учетные записи, переводить средства, развертывать контракты и взаимодействовать с ними. В этом особом случае пользователям не нужны предыдущие исторические данные, поэтому мы можем быстро синхронизировать текущее состояние сети Ethereum. Выполнение заказа:

geth console

Командная функция:

  • Запустите geth в режиме быстрой синхронизации (режим по умолчанию, вы можете использовать--syncmodeвозможность изменить режим синхронизации), поскольку он будет загружать большое количество данных о транзакциях, чтобы избежать обработки исторических данных всей сети Ethereum, это займет много ресурсов ЦП.
  • Запуск Geth Intrinsic InteractiveJavaScript console,(с помощьюconsoleподкоманда) через нее можно вызывать все официальныеweb3 methodsи собственный Гетаmanagement APIs. Это также необязательно, если вы уйдете, вы можете использоватьgeth attachПодключитесь к существующему экземпляру Geth.

Полный узел тестовой сети Ethereum

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

geth --testnet console

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

Тем не менее, указание--testnetнемного перенастроит ваш экземпляр Geth:

  • вместо использования каталога данных по умолчанию (например, в Linux~/.эфириум), Geth пойдет на один уровень глубже в создание каталогаtestnetподпапка (в Linux это~/.ethereum/testnet).注意,在OSX和Linux上,这也意味着连接一个运行的testnet节点要求使用一个自定义的端点,因为geth attach默认将连接一个生产节点。 Например:geth attach /testnet/geth.ipc. Пользователи Windows не затронуты.
  • Вместо подключения к основной сети Ethereum клиенты будут подключаться к тестовой сети с разными загрузочными узлами P2P, разными сетевыми идентификаторами и состояниями генезиса.

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

Полный узел тестовой сети Ринкеби

Приведенная выше тестовая сеть представляет собой кросс-клиентскую сеть, основанную на алгоритме консенсуса ethash proof-of-work. Следовательно, из-за низкой сложности/безопасности сети она имеет некоторые дополнительные накладные расходы и более уязвима для атак повторной сборки. Go Ethereum также поддерживает подключение к тестовой сети проверки полномочий (управляемой членами сообщества) под названием Rinkeby. Эта сеть легче и безопаснее, но поддерживается только go-ethereum.

geth --rinkeby console

настроить

Вместо того, чтобы передавать кучу опций бинарному файлу geth, вы можете передать файл конфигурации через:

geth --config /path/to/your_config.toml

Чтобы понять, как написан этот файл, вы можете использоватьdumpconfigПодкоманда для экспорта существующей конфигурации:

geth --your-favourite-flags dumpconfig
eg:geth --testnet dumpconfig

Примечание: Это действительно только для geth v1.6.0 и выше.

Docker quick start

Используя Docker, вы можете быстро запустить Ethereum на своем компьютере:

docker run -d --name ethereum-node -v /Users/alice/ethereum:/root \
           -p 8545:8545 -p 30303:30303 \
           ethereum/client-go

Приведенная выше команда запустит geth в режиме быстрой синхронизации с 1 ГБ памяти БД. Он также создаст постоянный том в вашем домашнем каталоге для хранения вашей цепочки блоков и сопоставленных портов по умолчанию. есть еще одинalpineТеги можно использовать в урезанной версии изображения.

Если вы хотите получить доступ к RPC из других контейнеров или хостов, не забудьте--rpcaddr 0.0.0.0. по умолчанию,gethПривяжите локальный интерфейс, и конечная точка RPC будет недоступна извне.

Программируемый интерфейс Geth узлов

Как разработчик, вы захотите начать взаимодействовать с Geth и сетью Ethereum на ранней стадии через свои собственные программы, а не через ручную консоль. С этой целью Geth имеет встроенную поддержку API на основе (standard APIsиGeth specific APIs) JSON-RPC. Его можно открыть через HTTP, WebSockets и IPC (сокеты unix на платформах на базе unix и именованные каналы в Windows).

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

Подробнее см.Programatically interfacing Geth nodes

управлять частной сетью

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

Примечание. Чтобы сделать следующие шаги по созданию частной сети Ethereum более простыми, автор по умолчанию будет использовать следующие значения параметров geth (пожалуйста, проверьте значение параметров самостоятельно):

  • --datadir /root/privatenet/.ethereum
  • --config config/privatenet.toml

Прежде чем мы начнем, позвольте мне представить, как создать учетную запись Ethereum:

  • Создайте учетную запись Ethereum в основной сети и выполните команду:
geth account new
  • Создайте приватную учетную запись сети Ethereum и выполните команду:
geth --datadir /root/privatenet/.ethereum account new

Введите пароль учетной записи, как будет предложено.

Примечание. При создании учетной записи Ethereum в частной сети обязательно укажите--datadirвариант, в противном случае учетная запись Ethereum в основной сети будет создана по умолчанию.

Определить частное состояние генезиса

Во-первых, вам нужно создать состояние генезиса, о котором должны знать и соглашаться все узлы вашей сети. Он состоит из небольшого файла JSON (например, назовите егоgenesis.json):

{
  "config": {
        "chainId": 15,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
  "alloc"      : {},
  "coinbase"   : "0x0000000000000000000000000000000000000000",
  "difficulty" : "0x20000",
  "extraData"  : "",
  "gasLimit"   : "0x2fefd8",
  "nonce"      : "0x0000000000001993",
  "mixhash"    : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp"  : "0x00"
}

Описание параметра(Следующая таблица составлена ​​автором со ссылкой на исходный код go-ethereum README и ethereum_yellow_paper Если есть какие-либо ошибки, поправьте меня):

параметр описывать
alloc Номер счета и количество эфира на счете могут быть заданы заранее
coinbase Адрес получателя блока может быть установлен на существующую учетную запись. Бенефициаром блока, добытого позже, будет учетная запись (майнер), которая добыла этот блок.
difficulty Представляет уровень сложности (в шестнадцатеричном формате) текущего блока, где определяется уровень сложности генезисного блока.Чем выше уровень сложности, тем сложнее майнить. Уровень сложности сгенерированного позже блока рассчитывается на основе уровня сложности и метки времени предыдущего блока.
extraData Массив байтов, содержащий данные, относящиеся к этому блоку, заполняется произвольно. Должен быть в пределах 32 бит
gasLimit Максимальное количество газа, которое должно быть использовано для выполнения этой транзакции. Это предварительно оплачено до того, как будут выполнены какие-либо вычисления, и не будет увеличиваться после
nonce Представляет количество транзакций, отправленных с этого адреса, или, в случае учетных записей, связанных с кодом, количество контрактов, созданных этой учетной записью. (Есть много описаний nonce в Yellow Paper, и здесь выбрано описание из главы 4.1.)
mixhash 256-битный хеш, объединенный одноразовым номером, доказывающий, что в этом блоке было выполнено достаточное количество вычислений.
parentHash Хэш алгоритма keccak256 заголовка предыдущего (родительского) блока
timestamp Unix time() и разумный вывод в начале этого блока

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

"alloc": {
  "0x0000000000000000000000000000000000000001": {"balance": "111111111"},
  "0x0000000000000000000000000000000000000002": {"balance": "222222222"}
}

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

geth --datadir /root/privatenet/.ethereum init genesis.json

начать загрузку

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

  1. Каждый узел Эфириума, включая загрузочный узел, связан идентификатором узла. Эти идентификаторы являются производными от ключа. Поэтому вам нужно будет дать загрузочному узлу такой ключ. Так как в настоящее время у нас нет такого ключа, мы можем сгенерировать ключ (и сохранить его в файле) перед запуском загрузочного узла:
bootnode -genkey bootnode.key
  1. Чтобы загрузочный узел использовал один и тот же enode каждый раз при запуске, необходимо указать ключ при запуске загрузочного узла:
bootnode -nodekey bootnode.key

Когда загрузочный узел подключается к сети, он отображаетenode URL,Например:

INFO [05-09|01:47:05] UDP listener up                          self=enode://75535ebac1f5b2a644edb134dbe91c6c288353be1a5301864edae529630b35c5ff0c0ae9e07b2bcdef578c3ac1b72b2cda105c061c2c77067f1fd8ec54d852b7@[::]:30301

Другие узлы могут использовать это соединение для передачи URL и обмена информацией. Подтвердите замену информации об IP-адресе вашего внешнего дисплея (возможно, [::]), чтобы получить реальный URL-адрес enode. Например:

enode://75535ebac1f5b2a644edb134dbe91c6c288353be1a5301864edae529630b35c5ff0c0ae9e07b2bcdef578c3ac1b72b2cda105c061c2c77067f1fd8ec54d852b7@192.168.1.214:30301

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

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

определить файл конфигурации

Чтобы использовать ту же конфигурацию при запуске узлов-членов, вам необходимо написать файл конфигурации, такой как privatenet.toml (см.testnetконфигурации, выполните командуgeth --testnet dumpconfigвидимый):

# Note: this config doesn't contain the genesis block.

[Eth]
NetworkId = 3369
DatabaseCache = 768
GasPrice = 18000000000

[Eth.Ethash]
CacheDir = "ethash"
CachesInMem = 2
CachesOnDisk = 3
DatasetDir = "/root/privatenet/.ethash"
DatasetsInMem = 1
DatasetsOnDisk = 2

[Eth.TxPool]
NoLocals = false
Journal = "transactions.rlp"
Rejournal = 3600000000000
PriceLimit = 1
PriceBump = 10
AccountSlots = 16
GlobalSlots = 4096
AccountQueue = 64
GlobalQueue = 1024
Lifetime = 10800000000000

[Eth.GPO]
Blocks = 20
Percentile = 60

[Shh]
MaxMessageSize = 1048576
MinimumAcceptedPOW = 2e-01

[Node]
DataDir = "/root/privatenet/.ethereum"
IPCPath = "geth.ipc"
HTTPPort = 8545
HTTPVirtualHosts = ["localhost"]
HTTPModules = ["net", "web3", "eth", "shh"]
WSPort = 8546
WSModules = ["net", "web3", "eth", "shh"]

[Node.P2P]
MaxPeers = 25
NoDiscovery = false
BootstrapNodes = ["enode://75535ebac1f5b2a644edb134dbe91c6c288353be1a5301864edae529630b35c5ff0c0ae9e07b2bcdef578c3ac1b72b2cda105c061c2c77067f1fd8ec54d852b7@1
92.168.1.214:30301"]StaticNodes = []
TrustedNodes = []
ListenAddr = ":30303"
EnableMsgEvents = false

[Dashboard]
Host = "localhost"
Port = 8080
Refresh = 5000000000

Инструкции по настройке(Следующая таблица представляет собой справочное описание параметра geth автора и код элемента конфигурации, связанного с Go-Ethereum, если есть ошибка, пожалуйста, помогите мне исправить):

площадь элемент конфигурации Соответствующие параметры инструкция
Eth NetworkId --networkid value Идентификатор сети (целочисленный тип, 1=Frontier, 2=Morden(вышедшее из употребления), 3=Ropsten, 4=Rinkeby), по умолчанию 1. При установке в частной сети используйте другое произвольное значение, например: 3369.
Eth DatabaseCache null (Личное понимание) Системная память, применяемая для базы данных, единица измерения - МБ, минимальное значение и значение по умолчанию - 16 МБ.
Eth GasPrice --gasprice "18000000000" Минимальная цена газа для принятия транзакций майнинга. может относиться к вознаграждению шахтеров
Eth.Ethash CacheDir --ethash.cachedir Каталог для хранения кэша подтверждения ethash (по умолчаниюdatadirкаталог)
Eth.Ethash CachesInMem --ethash.cachesinmem value Количество актуальных кэшей ethash (на 16 МБ), которые нужно хранить в памяти (по умолчанию: 2).
Eth.Ethash CachesOnDisk --ethash.cachesondisk value Количество актуальных кэшей ethash (на 16 МБ), которые нужно хранить на диске (по умолчанию: 3).
Eth.Ethash DatasetDir --ethash.dagdir "/home/karalabe/.ethash" Каталог, в котором хранятся DAG майнинга ethash (по умолчанию в домашнем каталоге)
Eth.Ethash DatasetsInMem --ethash.dagsinmem value Последние группы DAG майнинга ethash, которые нужно хранить в памяти (каждый 1+ ГБ) (по умолчанию: 1).
Eth.Ethash DatasetsOnDisk --ethash.dagsondisk value Последние DAG майнинга ethash (на 1+ ГБ) хранятся на диске (по умолчанию: 2).
Eth.TxPool NoLocals --txpool.nolocals Отказ от комиссий за локальную фиксацию транзакций
Eth.TxPool Journal --txpool.journal value Журнал локального диска транзакций для перезапусков узлов (по умолчанию: «transactions.rlp»)
Eth.TxPool Rejournal --txpool.rejournal value Интервал для регенерации локального журнала транзакций (по умолчанию: 1 ч 0 мин 0 с)
Eth.TxPool PriceLimit --txpool.pricelimit value Минимальный предел цены на газ для принудительного включения в пул (по умолчанию: 1)
Eth.TxPool PriceBump --txpool.pricebump value Процент столкновения цен для замены существующей транзакции (по умолчанию: 10)
Eth.TxPool AccountSlots --txpool.accountslots value Минимальное количество исполняемых слотов транзакций, гарантированное для каждой учетной записи (по умолчанию: 16).
Eth.TxPool GlobalSlots --txpool.globalslots value Максимальное количество исполняемых слотов транзакций для всех учетных записей (по умолчанию: 4096)
Eth.TxPool AccountQueue --txpool.accountqueue value Максимальное количество неисполняемых слотов транзакций, разрешенных для каждой учетной записи (по умолчанию: 64)
Eth.TxPool GlobalQueue --txpool.globalqueue Максимальное количество неисполняемых слотов транзакций для всех учетных записей (по умолчанию: 1024)
Eth.TxPool Lifetime --txpool.lifetime value Максимальное время ожидания для невыполнимых транзакций (по умолчанию: 3 часа 0 минут 0 секунд)
Eth.GPO Blocks --gpoblocks value Проверьте количество последних блоков в GAS (по умолчанию: 10)
Eth.GPO Percentile --gpopercentile value Предлагаемая цена на газ представляет собой набор процентиля цены последней транзакции на газ (по умолчанию: 50).
Shh MaxMessageSize --shh.maxmessagesize value Максимально допустимый размер сообщения (по умолчанию: 1048576)
Shh MinimumAcceptedPOW --shh.pow value Минимально приемлемый POW (по умолчанию: 0,2)
Node DataDir --datadir "/home/karalabe/.ethereum" Каталог данных баз данных и хранилища ключей
Node IPCPath --ipcpath Имя файла сокета/канала IPC в каталоге данных
Node HTTPPort --rpcport value Порт прослушивания службы HTTP-RPC (по умолчанию: 8545)
Node HTTPVirtualHosts --rpcaddr value Служба HTTP-RPC для прослушивания интерфейса (по умолчанию: «localhost»)
Node HTTPModules null Список модулей API, предоставляемых через интерфейс HTTP RPC
Node WSPort --wsport value Порт прослушивания службы WS-RPC (по умолчанию: 8546)
Node WSModules null Список модулей API, предоставляемых через интерфейс RPC websocket. Если модули пусты, будут доступны все конечные точки API RPC, указывающие на общедоступность.
Node.P2P MaxPeers --maxpeers value Максимальное количество одноранговых узлов сети (если установлено значение 0, сеть выйдет из строя) (по умолчанию: 25)
Node.P2P NoDiscovery --nodiscover Отключите механизм обнаружения пиров (ручное добавление пиров).Для этого установлено значение false, чтобы можно было обнаружить новые узлы, использующие этот профиль..
Node.P2P BootstrapNodes --bootnodes value URL-адреса начальной загрузки P2P-обнаружения, разделенные запятыми (для легких серверов вместо этого установите v4+v5).Замените URL-адрес enode, полученный при запуске загрузочных узлов выше, и добавьте его сюда после замены IP-адреса..
Node.P2P BootstrapNodesV5 --bootnodesv5 value URL-адреса загрузочного узла обнаружения P2P v5, разделенные запятыми (легкий сервер, легкие узлы)
Node.P2P StaticNodes null Список URL-адресов узлов, настроенных как статические узлы
Node.P2P TrustedNodes null Список URL-адресов узлов, настроенных как доверенные узлы
Node.P2P ListenAddr --port Порт прослушивания сети (по умолчанию: 30303)
Node.P2P EnableMsgEvents null Если EnableMsgEvents установлен, сервер будет генерировать PeerEvents всякий раз, когда одноранговый узел отправляет или получает сообщение.
Dashboard Host null Хост-интерфейс для запуска службы панели мониторинга. Если это поле пустое, панель мониторинга не будет запущена.
Dashboard Port null Номер порта TCP для запуска службы панели мониторинга. Значение по умолчанию 0 допустимо и будет использовать случайный номер порта (для эфемерных узлов).
Dashboard Refresh null Частота обновления для обновления данных, данные chartEntry будут собираться часто

Создайте папку конфигурации в рабочем каталоге и переместите записанный файл конфигурации privatenet.toml в каталог конфигурации.

Запустите узлы члена

Узлы-члены Ethereum полностью одноранговые, и каждый узел может иметь несколько учетных записей.

Запустите узел-участник частной сети Ethereum:

geth --config config/privatenet.toml

Подключитесь к только что запущенному или уже работающему узлу, чтобы запустить интерактивную среду JavaScript:

geth attach privatenet/.ethereum/geth.ipc

Официальное описание:Когда загрузочный узел работает и доступен извне (вы можете попробоватьtelnet чтобы подтвердить, что он действительно доступен), запускайте последующие узлы Geth для обнаружения одноранговых узлов через--bootnodesОпции указывают на bootnode. Вероятно, было бы разумно хранить каталог данных вашей частной сети отдельно, поэтому также укажите пользовательский--datadirопции.

geth --datadir=path/to/custom/data/folder --bootnodes=<bootnode-enode-url-from-above>

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

управлять частным майнером

Майнинг общедоступной сети Ethereum — сложная задача, поскольку она возможна только с использованием графических процессоров, требующих активации OpenCL или CUDA.ethminerпример. Для получения дополнительной информации см.EtherMining subredditиGenoil minerсклад.

Тем не менее, в конфигурации частной сети для практических нужд достаточно одного экземпляра майнера ЦП, так как он не требует больших ресурсов (учитывая работу в одном потоке или нескольких потоках) для правильной работы. Создает стабильный поток блоков в пределах интервал. Запустите экземпляр Geth для майнинга, запустите его с параметрами, которые вы обычно используете, и расширьте его с помощью:

geth --config config/privatenet.toml --mine --minerthreads=1 --etherbase=0x0000000000000000000000000000000000000000

Это запустит добычу блоков и транзакций в одном потоке ЦП, поместив все события в--etherbaseУчетная запись, указанная опцией, если учетная запись не указана, по умолчанию будет указана первая учетная запись на текущем узле. Вы можете дополнительно настроить майнинг с помощью (--targetgaslimit), чтобы изменить блок ограничения газа по умолчанию, и в (--gasprice) для принятия ценовых транзакций.

Альтернативно, экземпляр добычи также может контролироваться в интерактивной среде JavaScript:

  • Запустите экземпляр 4-поточного майнинга:
miner.start(4)
  • Остановите экземпляр майнинга:
miner.stop()

Дополнительную информацию о майнинге см.Mining

На данный момент частная сеть Ethereum построена, спасибо за внимание!


Оригинальность непростая, поделюсь с вами!

Последние адреса статьи