Глава 2
____________________________________
[ 54 ]
___________________________________
закция выполняется. Если затраты газа превышают лимит, то все изменения отме-
няются, кроме валидности транзакции, но вознаграждение за транзакцию майнером
может быть получено.
Майнеры самостоятельно устанавливают стоимость газа (цену за единичное
вычисление на своем узле). Если транзакция предлагает меньшую цену газа, чем
запросил майнер, то майнер отвергает транзакцию. Стоимость газа измеряется
в единицах Wei (см. ранее
разд. «Деноминация эфира»
). Иными словами, майнер
может отказаться включать транзакцию в блок, если предложенная стоимость газа
меньше, чем ему нужно.
С каждой операцией виртуальной машины Ethereum связано количество газа,
необходимое для выполнения операции.
Транзакционные издержки влияют на максимальное количество эфира, который
может быть переведен с одного счета на другой. Например, если на счете хранится
пять эфиров, то невозможно эти пять эфиров полностью перевести на другой счет,
потому что после перевода на исходном счете не останется ничего для оплаты
комиссии за транзакцию.
Если транзакция вызывает метод контракта, и метод отправляет некоторое количе-
ство монет или вызывает другой метод контракта, комиссия за транзакцию вычита-
ется со счета, который вызвал метод.
Обнаружение узлов
Чтобы узел стал частью сети, он должен установить соединение с остальными
узлами сети, благодаря чему сможет транслировать транзакции/блоки и слушать
трансляцию транзакций/блоков. Узел не нуждается в соединении со всеми сущест-
вующими узлами сети. Напротив, узел соединяется лишь с несколькими узлами.
В свою очередь, каждый из таких узлов соединяется с несколькими другими узла-
ми. Так формируется сеть взаимосвязанных узлов.
Но каким образом узел может найти в сети другие узлы, если не существует цен-
тральный сервер, с которым любой желающий мог бы обменяться информацией?
Ethereum использует для решения этой проблемы собственный протокол обнару-
жения узлов, основанный на протоколе Kademlia. В соответствии с этим протоко-
лом, в сети есть специальные узлы, которые называют
загрузочными
(bootstrap
node). Загрузочный узел формирует список узлов, которые подключались к нему
в течение определенного периода времени. Загрузочный узел не хранит блокчейн.
Когда узел пользователя подключается к сети, он первым делом соединяется с за-
грузочным узлом и получает список узлов, которые соединялись с ним в течение
заранее заданного периода времени. Затем новый узел соединяется и синхронизи-
руется с узлами из списка.
Могут существовать различные экземпляры Ethereum, т. е. различные сети, каждая
из которых имеет свой идентификатор. Две основные сети Ethereum называются
Принципы работы Ethereum
____________________________________
[ 55 ]
___________________________________
mainnet
(главная сеть) и
testnet
(тестовая сеть). Сеть
mainnet
служит для торговли
эфиром на биржах, а сеть
testnet
используется разработчиками для тестирования.
Все, что мы изучили до сих пор, относится к блокчейну сети
mainnet
.
Bootnode — это наиболее популярная реализация загрузочного узла Ethereum.
Если вы хотите создать собственный загрузочный узел, то можете использовать
Bootnode.
Протоколы Whisper и Swarm
Whisper (шепот) и Swarm (рой) — это, соответственно, децентрализованный прото-
кол связи и децентрализованная платформа для хранения данных, созданные разра-
ботчиками Ethereum.
Whisper помогает узлам общаться друг с другом. Он поддерживает широковеща-
тельные сообщения, связь пользователь-пользователь, шифрованные сообщения и
многое другое. Он не предназначен для передачи большого объема данных.
Вы можете прочитать больше о протоколе Whisper по адресу:
https://github.com/
ethereum/wiki/wiki/Whisper
и ознакомиться с обзором примеров кода по адресу:
https://github.com/ethereum/wiki/wiki/Whisper-Overview
.
Swarm похожа на Filecoin и отличается, в основном, техническими деталями и по-
ощрением. Filecoin не оплачивает хранение, тогда как Swarm выплачивает возна-
граждение — это увеличивает доступность информации. Вы можете спросить, как
реализовано поощрение в Swarm? Имеет ли она внутреннюю валюту? На самом
деле, у Swarm нет для выплаты вознаграждения другой валюты, кроме эфира.
Существует смарт-контракт Ethereum, который отслеживает поощрения. Очевидно,
что смарт-контракт не может общаться со Swarm. Наоборот, Swarm может обра-
щаться к контракту. В общем, вы платите хранилищу через смарт-контракт, и пла-
теж зачисляется хранилищу по наступлении заданной даты. Вы также можете со-
общить контракту о пропаже файла, и контракт взыщет штраф с соответствующего
хранилища.
Вы можете узнать больше о различиях между Swarm и IPFS/Filecoin по адресу:
https://github.com/ethersphere/go-ethereum/wiki/IPFS-&-SWARM
и получить ис-
ходный код смарт-контракта по адресу:
https://github.com/ethersphere/go-ethereum/
blob/bzz-config/bzz/bzzcontract/swarm.sol
.
На момент работы над книгой Whisper и Swarm находились в разработке, поэтому
многие тонкости пока остаются нераскрытыми.
Geth
Geth (или Go-Ethereum) — это реализация узлов Ethereum, Whisper и Swarm. Geth
может быть использован как компонент всех трех протоколов или только для лю-
бого из них. Причина использования Geth заключается в потребности сделать так,
Do'stlaringiz bilan baham: |