Цель BNB Smart Chain — обеспечить программируемость и совместимость BNB Beacon Chain. Чтобы охватить существующее популярное сообщество и передовые технологии, он принесет огромные преимущества, оставаясь совместимым со всеми существующими смарт-контрактами на Ethereum и инструментами Ethereum. И для достижения этой цели самым простым решением является разработка на основе форка go-ethereum, поскольку мы очень уважаем великую работу Ethereum.
BNB Smart Chain начинает разработку на основе форка go-ethereum. Таким образом, вы можете увидеть, что многие инструменты, двоичные файлы и документы основаны на Ethereum, например, имя «geth».
Но исходя из этой базовой совместимости с EVM, BNB Smart Chain представляет систему из 21 валидатора с консенсусом Proof of Staked Authority (PoSA), который может поддерживать короткое время блокировки и более низкие комиссии. Наиболее связанные валидаторы-кандидаты на стейкинг станут валидаторами и будут производить блоки. Обнаружение двойного знака и другая логика разделения гарантируют безопасность, стабильность и завершенность цепочки.
Смарт-цепочка BNB будет:
Самостоятельный блокчейн : обеспечивает безопасность и надежность с помощью избранных валидаторов.
Совместимость с EVM : поддерживает все существующие инструменты Ethereum, а также обеспечивает более быструю завершенность и более низкую комиссию за транзакции.
Распространяется с управлением по цепочке : доказательство владения полномочиями обеспечивает децентрализацию и участие участников сообщества. В качестве собственного токена BNB будет служить как источником исполнения смарт-контрактов, так и токенами для ставок.
Более подробная информация в Белой книге.
Хотя Proof-of-Work (PoW) был одобрен в качестве практического механизма реализации децентрализованной сети, он небезопасен для окружающей среды, а также требует большого количества участников для поддержания безопасности.
Доказательство авторизации (PoA) обеспечивает некоторую защиту от атаки 51%, с повышенной эффективностью и устойчивостью к определенным уровням византийских игроков (злонамеренных или взломанных). Между тем, протокол PoA больше всего критикуют за то, что он не так децентрализован, как PoW, поскольку валидаторы, то есть узлы, которые по очереди производят блоки, обладают всеми полномочиями и склонны к коррупции и атакам на безопасность.
Другие блокчейны, такие как EOS и Cosmos, вводят различные типы заместительного доказательства доли (DPoS), позволяющие держателям токенов голосовать и выбирать набор валидаторов. Это увеличивает децентрализацию и способствует управлению сообществом.
Чтобы объединить DPoS и PoA для достижения консенсуса, BNB Smart Chain реализует новый механизм консенсуса под названием Parlia, который:
Блоки создаются ограниченным набором валидаторов.
Валидаторы по очереди создают блоки методом PoA, аналогично механизму консенсуса Ethereum Clique.
Набор валидаторов избирается на основе управления на основе ставок в BNB Smart Chain.
Механизм консенсуса Parlia будет взаимодействовать с набором системных контрактов для обеспечения снижения активности, распределения доходов и обновления набора валидаторов.
BNB будет работать на BNB Smart Chain так же, как ETH работает на Ethereum, поэтому он останется native token
для BSC. Это означает, что BNB будет использоваться для:
заплатите gas
за развертывание или активацию смарт-контракта на BSC
Многие из перечисленных ниже аналогичны Go-Ethereum или похожи на них.
Предварительные условия и подробные инструкции по сборке см. в Инструкции по установке.
Для сборки geth
требуется как Go (версия 1.21 или новее), так и компилятор C (GCC 5 или новее). Вы можете установить их с помощью вашего любимого менеджера пакетов. После установки зависимостей запустите
сделать гетов
или, чтобы создать полный набор утилит:
сделать все
Если вы получаете такую ошибку при запуске узла с самостоятельно созданным двоичным файлом:
Обнаружив SIGILL в blst_cgo_init, обратитесь к <blst>/bindinds/go/README.md.
попробуйте добавить следующие переменные среды и повторить сборку:
экспорт CGO_CFLAGS="-O -D__BLST_PORTABLE__" экспорт CGO_CFLAGS_ALLOW="-O -D__BLST_PORTABLE__"
Проект bsc включает в себя несколько оболочек/исполняемых файлов, находящихся в каталоге cmd
.
Команда | Описание |
---|---|
geth | Основной двоичный файл клиента BNB Smart Chain. Это точка входа в сеть BSC (основная, тестовая или частная сеть), способная работать как полный узел (по умолчанию), архивный узел (сохраняющий все историческое состояние) или легкий узел (получающий данные в реальном времени). Он имеет тот же и более RPC и другой интерфейс, что и go-ethereum, и может использоваться другими процессами в качестве шлюза в сети BSC через конечные точки JSON RPC, предоставляемые поверх транспортов HTTP, WebSocket и/или IPC. geth --help и страница CLI для параметров командной строки. |
clef | Автономный инструмент подписи, который можно использовать в качестве внутреннего подписывающего устройства для geth . |
devp2p | Утилиты для взаимодействия с узлами на сетевом уровне без запуска полного блокчейна. |
abigen | Генератор исходного кода для преобразования определений контрактов Ethereum в простые в использовании, типобезопасные пакеты Go во время компиляции. Он работает на простых ABI контрактов Ethereum с расширенной функциональностью, если байт-код контракта также доступен. Однако он также принимает исходные файлы Solidity, что значительно упрощает разработку. Подробности смотрите на нашей странице «Нативные DApps». |
bootnode | Урезанная версия нашей реализации клиента Ethereum, которая участвует только в протоколе обнаружения сетевых узлов, но не запускает ни один из протоколов приложений более высокого уровня. Его можно использовать в качестве облегченного узла начальной загрузки, помогающего находить одноранговые узлы в частных сетях. |
evm | Версия утилиты разработчика EVM (виртуальной машины Ethereum), которая способна запускать фрагменты байт-кода в настраиваемой среде и режиме выполнения. Его цель — обеспечить изолированную, детальную отладку кодов операций EVM (например, evm --code 60ff60ff --debug run ). |
rlpdump | Утилита разработчика для преобразования двоичных дампов RLP (префикс рекурсивной длины) (кодировка данных, используемая протоколом Ethereum как в сети, так и в соответствии с консенсусом) в более удобное для пользователя иерархическое представление (например, rlpdump --hex CE0183FFFFFFC4C304050583616263 ). |
geth
Перебор всех возможных флагов командной строки здесь выходит за рамки (см. нашу Wiki-страницу CLI), но мы перечислили несколько распространенных комбинаций параметров, которые помогут вам быстро освоить запуск собственного экземпляра geth
.
Аппаратное обеспечение должно соответствовать определенным требованиям для запуска полного узла в основной сети:
VPS работает под управлением последних версий Mac OS X, Linux или Windows.
ВАЖНО 3 ТБ (декабрь 2023 г.) свободного места на диске, твердотельный накопитель (SSD), gp3, 8 тыс. операций ввода-вывода в секунду, пропускная способность 500 МБ/с, задержка чтения <1 мс. (если узел запускается с моментальной синхронизацией, ему понадобится SSD NVMe)
16 ядер ЦП и 64 ГБ памяти (ОЗУ)
Предложите тип экземпляра m5zn.6xlarge или r7iz.4xlarge в AWS, c2-standard-16 в облаке Google.
Широкополосное подключение к Интернету со скоростью загрузки/выгрузки 5 МБ/с.
Требования к тестовой сети:
VPS работает под управлением последних версий Mac OS X, Linux или Windows.
500 ГБ памяти для тестовой сети.
4 ядра процессора и 16 гигабайт памяти (ОЗУ).
# Linuxwget $(curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest |grep браузер_ |grep geth_linux |cut -d" -f4)mv geth_linux geth chmod -v u+x geth# MacOSwget $(curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest |grep браузер_ |grep geth_mac |cut -d" -f4)mv geth_macos гет chmod -v u+x geth
//== основная сеть wget $(curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest |grep браузер_ |grep mainnet |cut -d" -f4) разархивируйте mainnet.zip //== тестовая сеть wget $(curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest |grep браузер_ |grep testnet |cut -d" -f4) разархивируйте testnet.zip
Загрузите последний снимок цепочки данных отсюда. Следуйте инструкциям, чтобы структурировать файлы.
./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0## Рекомендуется запускать полный узел с `--tries- verify-mode none`, если вам нужна высокая производительность и мало заботитесь о согласованности состояния## По умолчанию он будет работать с схемой хранения Hash-Base./geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0 --tries-verify-mode none## Он запускает полный узел со схемой хранения на основе пути. ## Он включит обрезку встроенного состояния, сохраняя по умолчанию состояние истории последних 90 000 блоков../geth --config ./config.toml --datadir ./node --cache 8000 --rpc.allow-unprotected-txs --history.transactions 0 --tries-verify-mode none --state.scheme путь
По умолчанию отслеживайте журнал из ./node/bsc.log . Когда узел начал синхронизацию, он должен увидеть следующий вывод:
t=2022-09-08T13:00:27+0000 lvl=info msg="Импортирован новый сегмент цепочки"blocks=1 txs=177 mgas=17.317 истекло=31.131ms mgasps=556.259 число=21,153,429 hash=0x42e6b54ba7106387f0650defc62c9ace3160b427702dab7bd1c5abb83a32d8dbгрязный="0,00 B"t=2022-09-08T13:00:29+0000 lvl=info msg="Импортирован новый сегмент цепочки"blocks=1 txs=251 mgas=39.638 истекло=68.827ms mgasps=575.900 число=21 153 430 хэш=0xa3397b273b31b013e43487689782f20c03f47525b4cd4107c1715af45a88796e грязный="0.00 B"t=2022-09-08T13:00:33+0000 lvl=info msg="Импортирован новый сегмент цепочки"blocks=1 txs=197 mgas=19.364 истекло=34.663ms mgasps=558.632 число=21,153,431 хэш=0x0c7872b698f28cb5c36a8a3e1e315b1d31bda6109b15467a9735a12380e2ad14грязный="0,00 Б"
Запустите встроенную интерактивную консоль JavaScript geth
(через завершающую подкоманду console
), с помощью которой вы можете взаимодействовать с помощью методов web3
(примечание: версия web3
, включенная в geth
, очень старая и не соответствует официальной документации), а также собственные API управления geth
. Этот инструмент является необязательным, и если вы его опустите, вы всегда сможете подключиться к уже работающему экземпляру geth
с помощью geth attach
.
Более подробная информация о запуске узла и о том, как стать валидатором
Примечание. Хотя некоторые внутренние защитные меры предотвращают пересечение транзакций между основной сетью и тестовой сетью, вам всегда следует использовать отдельные учетные записи для игры и реальных денег. Если вы не переместите учетные записи вручную, geth
по умолчанию правильно разделит две сети и не сделает доступными какие-либо учетные записи между ними.
В качестве альтернативы передаче многочисленных флагов в двоичный файл geth
вы также можете передать файл конфигурации через:
$ geth --config /путь/к/ваш_конфиг.toml
Чтобы получить представление о том, как должен выглядеть файл, вы можете использовать подкоманду dumpconfig
для экспорта существующей конфигурации:
$ geth --your-favourite-flags dumpconfig
geth
Как разработчик, рано или поздно вы захотите начать взаимодействовать с geth
и сетью BSC через свои собственные программы, а не вручную через консоль. Чтобы помочь этому, geth
имеет встроенную поддержку API на основе JSON-RPC (стандартные API и API, специфичные для geth
). Их можно предоставлять через HTTP, WebSockets и IPC (сокеты UNIX на платформах на базе UNIX и именованные каналы в Windows).
Интерфейс IPC включен по умолчанию и предоставляет все API, поддерживаемые geth
, тогда как интерфейсы HTTP и WS необходимо включать вручную и предоставлять только подмножество API по соображениям безопасности. Их можно включать/выключать и настраивать так, как вы ожидаете.
Параметры API JSON-RPC на основе HTTP:
--http
Включить сервер HTTP-RPC
--http.addr
Интерфейс прослушивания сервера HTTP-RPC (по умолчанию: localhost
)
--http.port
Порт прослушивания HTTP-RPC-сервера (по умолчанию: 8545
)
--http.api
API, предлагаемый через интерфейс HTTP-RPC (по умолчанию: eth,net,web3
)
--http.corsdomain
Список доменов, разделенных запятыми, от которых можно принимать запросы от перекрестного источника (принудительно в браузере)
--ws
Включить сервер WS-RPC
--ws.addr
Интерфейс прослушивания сервера WS-RPC (по умолчанию: localhost
)
--ws.port
Порт прослушивания сервера WS-RPC (по умолчанию: 8546
)
--ws.api
API, предлагаемый через интерфейс WS-RPC (по умолчанию: eth,net,web3
)
--ws.origins
Источники, из которых можно принимать запросы WebSocket
--ipcdisable
Отключить сервер IPC-RPC
--ipcapi
API, предлагаемый через интерфейс IPC-RPC (по умолчанию: admin,debug,eth,miner,net,personal,txpool,web3
)
--ipcpath
Имя файла для сокета/канала IPC в каталоге данных (явные пути обходят его)
Вам нужно будет использовать возможности вашей собственной среды программирования (библиотеки, инструменты и т. д.) для подключения через HTTP, WS или IPC к узлу geth
, настроенному с указанными выше флагами, и вам нужно будет использовать JSON-RPC на всех транспортах. Вы можете повторно использовать одно и то же соединение для нескольких запросов!
Примечание. Прежде чем делать это, ознакомьтесь с последствиями для безопасности открытия транспорта на основе HTTP/WS! Хакеры в Интернете активно пытаются взломать узлы BSC с открытыми API! Кроме того, все вкладки браузера могут получить доступ к локально работающим веб-серверам, поэтому вредоносные веб-страницы могут попытаться подорвать локально доступные API!
BSC-Deploy: инструмент развертывания для настройки BNB Smart Chain.
Загрузочные узлы — это сверхлегкие узлы, которые не находятся за NAT и используют только протокол обнаружения. Когда вы запускаете узел, он должен зарегистрировать ваш enode, который является общедоступным идентификатором, который другие могут использовать для подключения к вашему узлу.
Сначала загрузочному узлу требуется ключ, который можно создать с помощью следующей команды, которая сохранит ключ в boot.key:
bootnode -genkey boot.key
Этот ключ затем можно использовать для создания загрузочного узла следующим образом:
bootnode -nodekey boot.key -addr :30311 -network bsc
Выбор порта, передаваемого в -addr, произволен. Команда bootnode возвращает на терминал следующие журналы, подтверждающие его работу:
enode://3063d1c9e1b824cfbb7c7b6abafa34faec6bb4e7e06941d218d760acdd7963b274278c5c3e63914bd6d1b58504c59ec5522c56f883baceb8538674b92da48a96@127.0.0.1:0?discport=30311 Note: you're using cmd/bootnode, a developer tool. We recommend using a regular node as bootstrap node for production deployments. INFO [08-21|11:11:30.687] New local node record seq=1,692,616,290,684 id=2c9af1742f8f85ce ip=<nil> udp=0 tcp=0 INFO [08-21|12:11:30.753] New local node record seq=1,692,616,290,685 id=2c9af1742f8f85ce ip=54.217.128.118 udp=30311 tcp=0 INFO [09-01|02:46:26.234] New local node record seq=1,692,616,290,686 id=2c9af1742f8f85ce ip=34.250.32.100 udp=30311 tcp=0
Спасибо, что решили помочь с исходным кодом! Мы приветствуем вклад всех пользователей Интернета и благодарны даже за самые незначительные исправления!
Если вы хотите внести свой вклад в bsc, пожалуйста, сделайте форк, исправьте, зафиксируйте и отправьте разработчикам запрос на извлечение, чтобы они рассмотрели и включили его в основную базу кода. Если вы хотите отправить более сложные изменения, пожалуйста, сначала обратитесь к основным разработчикам на нашем канале Discord, чтобы убедиться, что эти изменения соответствуют общей философии проекта, и/или получите раннюю обратную связь, которая может значительно улучшить ваши усилия. легче, а наши процедуры проверки и слияния быстрые и простые.
Пожалуйста, убедитесь, что ваши материалы соответствуют нашим рекомендациям по написанию кода:
Код должен соответствовать официальным рекомендациям по форматированию Go (т. е. использовать gofmt).
Код должен быть задокументирован в соответствии с официальными правилами комментариев Go.
Запросы на включение должны основываться на master
ветке и открываться на ней.
Сообщения о фиксации должны иметь префикс пакета(ов), который они изменяют.
Например, «eth, rpc: сделать конфигурации трассировки необязательными»
Дополнительную информацию о настройке среды, управлении зависимостями проекта и процедурах тестирования см. в Руководстве разработчика.
Библиотека bsc (т.е. весь код за пределами каталога cmd
) лицензируется по лицензии GNU Lesser General Public License v3.0, которая также включена в наш репозиторий в файле COPYING.LESSER
.
Двоичные файлы bsc (т.е. весь код внутри каталога cmd
) лицензируются по лицензии GNU General Public License v3.0, которая также включена в наш репозиторий в файле COPYING
.