Автор данной статьи: оригинальная работа Star Alliance, просьба указывать источник для перепечатки
Чиновники Filecoin решили использовать Lotus в качестве системы реализации для тестирования, когда предстоящая тестовая сеть будет запущена 11 декабря.
Lotus, как отличная реализация Filecoin, получила достаточно внимания со стороны официальных и большинства тестовых майнеров и готовится к запуску тестовой сети, каждый день будет много обновлений и исправлений ошибок. Поэтому понимание реализации Lotus имеет большое значение для понимания всего проекта Filcoin. Будучи первой статьей об анализе исходного кода, эта статья поможет вам понять текущую структуру каталогов Lotus в надежде, что вы получите интуитивное представление о проекте Lotus и заложите хорошую основу для последующего глубокого понимания исходный код.
каталог API
Предоставляет фоновые службы для команд Lotus. Большинству команд необходимо взаимодействовать с фоновыми службами. Эти команды обычно используют данные в цепочке. Этот каталог абстрагирует определения узлов и определяет несколько интерфейсов go, таких как Common (определяет общие функции узлов), FullNode (определяет поведение полного узла, наследуется от Common), StorageMiner (майнеры хранилища, также наследуется от Common) и связанные функции.
В соответствии с указанными выше основными интерфейсами также предоставляется несколько структур, а именно CommonStruct, FullNodeStruct, StorageMinerStruct в качестве реализаций. Эти реализации используют режим прокси и просто пересылают запрос своим соответствующим внутренним членам. Необходимо использовать определенные функции Пользователь предоставляет, например, функция для получения списка платежных каналов:
каталог сборки
Определить функции для создания узлов, включая, помимо прочего: Получите параметры, связанные с запуском, из доверенных узлов (расположенных в paramfetch.go), сгенерируйте встроенные генезис-блоки (расположенные в genesis.go) и т. д. подкаталог генезиса: встроенные данные блока генезиса
кли-каталог
Реализация инструмента командной строки Lotus зависит от пакета gopkg.in/urfave/cli.v2, и имя файла go в нем в основном совпадает с подкомандой Lotus. В соответствии с каждой подкомандой и подкомандой подкоманды определяется объект Command, такой как команда Lotus chain:
Соответствующая команда определена в файле chain.go:
каталог cmd
Содержит множество различных проектов командной строки, Lotus делит систему на разные модули процессов и определяет проект для каждого модуля:
содержание | проект | иллюстрировать |
---|---|---|
lotus | демон | Отвечает за синхронизацию данных в публичной цепочке, взаимодействие с публичной цепочкой и т.д., является одним из основных процессов лотоса. |
lotus-bench | Инструмент сравнительного анализа | |
lotus-storage-miner | процесс добычи | Упаковывайте информацию в блоки и храните майнеры |
lotus-seal-worker | процесс запечатанных данных | Запечатанные данные — неотъемлемая часть процесса майнинга, и этот процесс реализует эту функцию. |
сетевой каталог
Для реализации функции взаимодействия с цепочкой она в основном разделена на следующие подкаталоги:
- типы: определить различные структуры данных в Filecoin
- store: относится к общедоступному хранилищу цепочки, обрабатывает все состояния локальной цепочки, включая заголовки цепочки, сообщения и состояния и т. д.
- состояние: обработка дерева состояний Filecoin, которое внутренне обертывает HAMT.
- актеры: различные встроенные типы сети Filecoinactorопределение
- vm: виртуальная машина Filecoin, реализующая вызов Filecoinactorинструменты метода
каталог майнера
Определите логику блока вывода и взаимодействуйте с полными узлами через API
каталог хранения
Определить логику майнера хранилища для реализации «lotus-storage-miner»
каталог узла
Определяет структуру и интерфейс, связанные с узлом лотоса.Основные подкаталоги следующие:
- привет: реализовать протокол приветствия
- модули: определите различные функции, которые реализуют функции узла, такие как:
Создать кошелек
func NewWallet(keystore types.KeyStore) (*Wallet, error) {
w := &Wallet{
keys: make(map[address.Address]*Key),
keystore: keystore,
}
return w, nil
}
Цепное хранение:
func ChainStore(lc fx.Lifecycle, bs dtypes.ChainBlockstore, ds dtypes.MetadataDS) *store.ChainStore {
chain := store.NewChainStore(bs, ds)
if err := chain.Load(); err != nil {
log.Warnf("loading chain state from disk: %s", err)
}
return chain
}
репо: локальное хранилище для данных по цепочке, работающее с локальной файловой системой.
каталог документации
Каталог документов Lotus. Lotus планирует предоставлять документы как на китайском, так и на английском языках, но английский документ постепенно совершенствуется, а cn-каталог пуст. Существующие документы в основном охватывают следующие аспекты:
- Руководство для начинающих
- аппаратные требования
- Установка Lotus на различные системы
- Руководство по запуску узла
- Как присоединиться к сети разработчиков
- Знакомство с прудом
- Руководство по майнингу
- Хранить данные в системе
каталог библиотеки
Реализовать функции, общие для каждого модуля проекта лотоса.
- крипто: реализовать шифрование данных, генерацию открытого ключа, подпись и проверку подписи и т. д.
- jsonrpc: реализует пакет rpc на основе json для передачи данных, включая сервер и клиент, что может обеспечить полную поддержку функции rpc для других проектов.
- statestore: обертывает github.com/ipfs/go-datastore для отслеживания состояния
- строитель сектора: реализовать управление сектором
- bufstore:: оборачивает github.com/ipfs/go-ipfs-blockstore и интегрирует функции чтения и записи Blockstore.
- cborutil: обертывает github.com/ipfs/go-ipld-cbor, предоставляя простой способ управления данными cbor.
- auth: реализует HTTP-интерфейс службы аутентификации авторизации
каталог лотоспонда
Каталог проекта Pond. Pond — это инструмент пользовательского интерфейса для управления Lotus, который можно использовать для создания независимой локальной сети для упрощения отладки. Pond запустит узлы, подключится с использованием указанной топологии, начнет майнинг и будет постоянно отслеживать состояние узла.
каталог поиска
Реализовать поисковый майнер и клиентские функции
директория скриптов
Различные сценарии запуска, используемые для узлов bushu, майнеров и т. д., также включают в себя некоторые файлы конфигурации для запуска.
заключительные замечания
Хотите вы в это верить или нет, блокчейн меняется и будет продолжать изменять мир вокруг нас в будущем Filecoin, как звездный блокчейн-проект сегодня, естественно, достоин нашей энергии для исследований и исследований. Interstellar Alliance продолжит делиться технологиями, связанными с Filecoin, учиться и развиваться вместе с вами, а также заранее связываться со следующей новой империей хранения.