Chainlink расширяет возможности смарт-контрактов, обеспечивая доступ к реальным данным и вычислениям вне сети, сохраняя при этом гарантии безопасности и надежности, присущие технологии блокчейн.
Этот репозиторий содержит основной узел Chainlink и контракты. Базовый узел — это связанный двоичный файл, доступный для запуска операторами узлов, участвующими в децентрализованной сети Oracle. Все основные версии выпуска имеют предварительно созданные образы докеров, доступные для загрузки из dockerhub Chainlink. Если вы заинтересованы в том, чтобы внести свой вклад, ознакомьтесь с нашими правилами внесения вкладов. Если вы здесь, чтобы сообщить об ошибке или запросить новую функцию, проверьте текущие открытые проблемы. Для получения дополнительной информации о том, как начать работу с Chainlink, ознакомьтесь с нашей официальной документацией. Ресурсы для разработчиков Solidity можно найти в защитной коробке Chainlink.
У Chainlink активное и постоянно растущее сообщество. Discord — это основной канал связи, используемый для повседневного общения, ответов на вопросы по разработке и агрегирования контента, связанного с Chainlink. Ознакомьтесь с документами сообщества, чтобы получить дополнительную информацию о социальных аккаунтах Chainlink, новостях и сетях.
Установите Go 1.22 и добавьте каталог bin вашего GOPATH в свой PATH.
Пример пути для export PATH=$GOPATH/bin:$PATH
и export GOPATH=/Users/$USER/go
Установите NodeJS v20 и pnpm v9 через npm.
Возможно, в долгосрочной перспективе будет проще использовать nvm для переключения между версиями узлов для разных проектов. Например, если для $NODE_VERSION установлена действительная версия NodeJS, вы можете запустить: nvm install $NODE_VERSION && nvm use $NODE_VERSION
Установите Postgres (>= 12.x). Рекомендуется запустить последнюю основную версию postgres.
Обратите внимание, что если вы используете официальный образ докера Chainlink, самая высокая поддерживаемая версия Postgres — 16.x из-за встроенного клиента.
Вам следует настроить Postgres для использования SSL-соединения (или для тестирования вы можете установить ?sslmode=disable
в строке запроса Postgres).
Убедитесь, что у вас установлен Python 3 (это требуется для solc-select, который необходим для компиляции контрактов Solidity)
Скачать Chainlink: git clone https://github.com/smartcontractkit/chainlink && cd chainlink
Сборка и установка Chainlink: make install
Запустите узел: chainlink help
Последнюю информацию о настройке среды разработки см. в Руководстве по настройке разработки.
Собственные сборки на Apple Silicon должны работать «из коробки», но образ Docker требует большего внимания.
$ сборка докера. -t Chainlink-develop:latest -f ./core/chainlink.Dockerfile
Чтобы запустить узел Chainlink, у вас должен быть доступ к работающему узлу Ethereum с открытым соединением через веб-сокет. Любая сеть на базе Ethereum будет работать после настройки идентификатора цепочки. Версии узлов Ethereum, протестированные и поддерживаемые в настоящее время:
[Официально поддерживается]
Parity/Openethereum (ПРИМЕЧАНИЕ: Parity устарел, и поддержка этого клиента может быть прекращена в будущем)
Гет
Бесу
[Поддерживается, но не работает] Эти клиенты поддерживаются Chainlink, но имеют ошибки, которые не позволяют Chainlink надежно работать на этих клиентах выполнения.
Проблемы с блокировкой Nethermind:
NethermindEth/nethermind#4384
Проблемы с блокировкой Erigon:
erigontech/erigon#4946
erigontech/erigon#4030 (комментарий)
Мы не можем рекомендовать конкретные номера версий для узлов Ethereum, поскольку программное обеспечение постоянно обновляется, но обычно вам следует попытаться запустить последнюю доступную версию.
ПРИМЕЧАНИЕ . По умолчанию Chainlink работает в режиме TLS. Для локальной разработки вы можете отключить это, используя dev build
с помощью make chainlink-dev
и установив поля TOML:
[WebServer]SecureCookies = falseTLS.HTTPSPort = 0[Insecure]DevWebServer = true
Альтернативно вы можете создать самозаверяющие сертификаты с помощью tools/bin/self-signed-certs
или вручную.
Чтобы запустить узел Chainlink, просто запустите:
начало узла звена цепи
По умолчанию это начнется с порта 6688. Вы сможете получить доступ к пользовательскому интерфейсу по адресу http://localhost:6688/.
Chainlink предоставляет удаленный клиент CLI, а также пользовательский интерфейс. После запуска вашего узла вы можете открыть новое окно терминала для использования CLI. Сначала вам нужно будет войти в систему, чтобы авторизовать клиента:
вход в систему администратора Chainlink
(Вы также можете установить ADMIN_CREDENTIALS_FILE=/path/to/credentials/file
в будущем, если хотите, чтобы избежать повторного входа в систему).
Теперь вы можете просмотреть свои текущие вакансии с помощью:
список вакансий цепочки
Чтобы узнать больше о CLI Chainlink, вы всегда можете запустить chainlink help
.
Посетите страницы документации о вакансиях, чтобы узнать больше о том, как создавать вакансии.
Конфигурация узла управляется с помощью комбинации переменных среды и прямой настройки через API/UI/CLI.
Дополнительную информацию о том, как настроить узел, можно найти в официальной документации.
Внешние адаптеры — это то, что делает Chainlink легко расширяемым, обеспечивая простую интеграцию пользовательских вычислений и специализированных API. Узел Chainlink взаимодействует с внешними адаптерами через простой REST API.
Для получения дополнительной информации о создании и использовании внешних адаптеров посетите нашу страницу внешних адаптеров.
Мы используем cosign
с подписью без ключа OIDC во время рабочего процесса сборки, подписи и публикации Chainlink.
Любому оператору узла, создающему из официального образа докера Chainlink, рекомендуется убедиться, что помеченная версия выпуска действительно была создана на основе этого рабочего процесса.
Для выполнения этой проверки вам понадобится cosign
. Следуйте инструкциям здесь, чтобы установить cosign.
Тег # — это отмеченная версия выпуска, т. е. v2.16.0cosign проверить public.ecr.aws/chainlink/chainlink:${tag} --certificate-oidc-issuer https://token.actions.githubusercontent.com --certificate-identity "https://github.com/smartcontractkit/chainlink/.github/workflows/build-publish.yml@refs/tags/${tag}"
Установите pnpm 9 через npm
Установите gencodec и jq, чтобы иметь возможность запускать go generate ./...
и make abigen
Установить издевательство
make mockery
Использование команды make
установит правильную версию.
Строительные контракты:
pushd контракты пнпм я компиляция pnpm:nativepopd
Сгенерируйте и скомпилируйте статические ресурсы:
заставить генерировать
Подготовьте среду разработки:
Для тестов требуется база данных Postgres. В свою очередь, переменной среды CL_DATABASE_URL
должно быть присвоено значение, позволяющее подключаться к базе данных _test
, и пользователь должен иметь возможность создавать и удалять данную базу данных _test
.
Примечание. Другие переменные среды не следует устанавливать для прохождения всех тестов.
Имеется вспомогательный скрипт для первоначальной настройки и создания соответствующего тестового пользователя. Требуется, чтобы postgres работал на локальном хосте с портом 5432. Вам будет предложено ввести пароль пользователя postgres
сделать setup-testdb
Этот скрипт сохранит CL_DATABASE_URL
в .dbenv
Изменения в базе данных требуют выполнения миграции. Аналогичным образом, pull
репозитория может потребоваться выполнение миграции. После однократной настройки выше:
source .dbenv make testdb
Если вы столкнулись database accessed by other users (SQLSTATE 55006) exit status 1
, и вы хотите принудительно создать базу данных, используйте
source .dbenv make testdb-force
Запустите тесты:
иди тестируй ./...
Флаг parallel
можно использовать для ограничения использования ЦП для запуска тестов в фоновом режиме ( -parallel=4
) — по умолчанию используется GOMAXPROCS
Флаг p
можно использовать для ограничения количества одновременно тестируемых пакетов , если они мешают друг другу ( -p=1
).
Флаг -short
пропускает тесты, которые зависят от базы данных, для быстрой выборочной проверки более простых тестов примерно за одну минуту.
Начиная с Go 1.1, среда выполнения включает детектор гонки данных, активируемый флагом -race
. Это используется в CI через скрипт tools/bin/go_core_race_tests
. Если действие обнаружит гонку, артефакт на странице сводки будет включать файлы race.*
с подробными трассировками стека.
Он не будет выдавать ложных срабатываний, поэтому отнеситесь к его предупреждениям серьезно.
Для локального целевого обнаружения гонок вы можете запустить:
GORACE="log_path=$PWD/race" go test -race ./core/path/to/pkg -count 10 GORACE="log_path=$PWD/race" go test -race ./core/path/to/pkg -count 100 -run TestFooBar/sub_test
https://go.dev/doc/articles/race_detector
Начиная с Go 1.18, нечеткие тесты func FuzzXXX(*testing.F)
включены как часть обычного набора тестов, поэтому существующие случаи выполняются с помощью go test
.
Дополнительно можно запустить активный фаззинг для поиска новых случаев:
пойти протестировать ./pkg/path -run=XXX -fuzz=FuzzTestName
https://go.dev/doc/fuzz/
Этот репозиторий содержит три модуля Go:
блок-схема РЛ
github.com/smartcontractkit/chainlink/v2
github.com/smartcontractkit/chainlink/integration-tests --> github.com/smartcontractkit/chainlink/v2
github.com/smartcontractkit/chainlink/core/scripts --> github.com/smartcontractkit/chainlink/v2
Загрузка Модули integration-tests
и core/scripts
импортируют корневой модуль, используя относительную замену в своих файлах go.mod
, поэтому изменения зависимостей в корневом файле go.mod
часто требуют изменений и в этих модулях. После внесения изменений go mod tidy
можно запустить на всех трех модулях, используя:
make gomodtidy
Внутри каталога contracts/
:
Установите зависимости:
пнпм я
Запустите тесты:
пнпм тест
ПРИМЕЧАНИЕ. Chainlink в настоящее время находится в процессе перехода на Foundry и в некоторых версиях содержит тесты Foundry и Hardhat. Более подробную информацию можно найти здесь: Документация Chainlink Foundry. Любые файлы «t.sol», связанные с тестами Foundry и содержащиеся в каталогах src, будут игнорироваться Hardhat.
Gogenerate используется для создания макетов в этом проекте. Моки генерируются с помощью насмешки и живут в core/internal/mocks.
Shell.nix предоставляется для использования с менеджером пакетов Nix. По умолчанию мы используем оболочку через Nix Flakes.
Nix определяет декларативную, воспроизводимую среду разработки. Версия Flakes использует детерминированные, замороженные ( flake.lock
) зависимости, чтобы добиться большей согласованности/воспроизводимости построенных артефактов.
Чтобы использовать его:
Установите менеджер пакетов nix в свою систему.
Включить поддержку хлопьев
Запустите nix develop
. Вы попадете в оболочку, содержащую все зависимости.
При желании nix develop --command $SHELL
будет использовать вашу текущую оболочку вместо оболочки по умолчанию (bash).
Вы можете использовать direnv
, чтобы включить его автоматически при cd
в папку; для этого включите nix-direnv и use flake
.
Создайте локальную базу данных Postgres:
mkdir -p $PGDATA && cd $PGDATA/ initdb pg_ctl -l postgres.log -o "--unix_socket_directories='$PWD'" start созданныйb Chainlink_test -h локальный хост createuser --superuser --password Chainlink -h localhost# затем введите тестовый пароль, например: Chainlink, и установите его в файле Shell.nix CL_DATABASE_URL
При повторном входе в проект вы можете перезапустить postgres: cd $PGDATA; pg_ctl -l postgres.log -o "--unix_socket_directories='$PWD'" start
Теперь вы можете запускать тесты или компилировать код как обычно.
Когда закончите, остановите его: cd $PGDATA; pg_ctl -o "--unix_socket_directories='$PWD'" stop
Мы используем наборы изменений для управления версиями библиотек и сервисов.
Каждый PR, который изменяет какую-либо конфигурацию или код, скорее всего, должен сопровождаться файлом набора изменений.
Чтобы установить changesets
:
Установите pnpm
если он еще не установлен — документация.
Запустите pnpm install
.
Либо после, либо перед созданием фиксации запустите команду pnpm changeset
, чтобы создать соответствующую запись набора изменений, которая будет отражена в CHANGELOG для следующего выпуска.
Формат основан на Keep a Changelog,
и этот проект придерживается семантического управления версиями.
Дополнительные советы о том, как создать и протестировать Chainlink, можно найти на нашей странице советов по разработке.
Вклад в исходный код Chainlink приветствуется.
Пожалуйста, ознакомьтесь с нашими рекомендациями по участию для более подробной информации.
Спасибо!