Анализ исходного кода Lotus — структура каталогов кода

блокчейн

Автор данной статьи: оригинальная работа Star Alliance, просьба указывать источник для перепечатки

Чиновники Filecoin решили использовать Lotus в качестве системы реализации для тестирования, когда предстоящая тестовая сеть будет запущена 11 декабря.

Lotus

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命令

Соответствующая команда определена в файле chain.go:

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, учиться и развиваться вместе с вами, а также заранее связываться со следующей новой империей хранения.