Chainlink는 블록체인 기술에 내재된 보안 및 신뢰성 보장을 유지하면서 실제 데이터 및 오프체인 계산에 대한 액세스를 지원함으로써 스마트 계약의 기능을 확장합니다.
이 저장소에는 Chainlink 핵심 노드와 계약이 포함되어 있습니다. 코어 노드는 분산형 오라클 네트워크에 참여하는 노드 운영자가 실행할 수 있는 번들 바이너리입니다. 모든 주요 릴리스 버전에는 Chainlink dockerhub에서 다운로드할 수 있는 사전 빌드된 Docker 이미지가 있습니다. 기여에 관심이 있으시면 기여 가이드라인을 참조하세요. 버그를 보고하거나 기능을 요청하기 위해 이곳에 오신 경우 현재 열려 있는 문제를 확인하세요. Chainlink를 시작하는 방법에 대한 자세한 내용은 공식 문서를 확인하세요. Solidity 개발자를 위한 리소스는 Chainlink Hardhat Box에서 찾을 수 있습니다.
Chainlink는 활발하고 지속적으로 성장하는 커뮤니티를 보유하고 있습니다. Discord는 일상적인 커뮤니케이션, 개발 질문에 대한 답변, Chainlink 관련 콘텐츠 집계에 사용되는 주요 커뮤니케이션 채널입니다. Chainlink 소셜 계정, 뉴스 및 네트워킹에 관한 자세한 내용은 커뮤니티 문서를 살펴보세요.
Go 1.22를 설치하고 GOPATH의 bin 디렉터리를 PATH에 추가하세요.
macOS export PATH=$GOPATH/bin:$PATH
및 export GOPATH=/Users/$USER/go
의 경로 예
npm을 통해 NodeJS v20 및 pnpm v9를 설치합니다.
장기적으로 nvm을 사용하여 다양한 프로젝트의 노드 버전 간에 전환하는 것이 더 쉬울 수 있습니다. 예를 들어 $NODE_VERSION이 유효한 NodeJS 버전으로 설정되었다고 가정하면 다음을 실행할 수 있습니다. nvm install $NODE_VERSION && nvm use $NODE_VERSION
Postgres(>= 12.x)를 설치합니다. 최신 메이저 버전의 Postgres를 실행하는 것이 좋습니다.
공식 Chainlink 도커 이미지를 실행하는 경우 번들 클라이언트로 인해 지원되는 가장 높은 Postgres 버전은 16.x입니다.
SSL 연결을 사용하도록 Postgres를 구성해야 합니다(또는 테스트를 위해 Postgres 쿼리 문자열에 ?sslmode=disable
설정할 수 있음).
Python 3이 설치되어 있는지 확인하십시오(이는 Solidity 계약을 컴파일하는 데 필요한 solc-select에 필요함).
체인링크 다운로드: 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 노드에 액세스할 수 있어야 합니다. 체인 ID를 구성하면 모든 Ethereum 기반 네트워크가 작동합니다. 현재 테스트되고 지원되는 Ethereum 노드 버전:
[공식적으로 지원]
Parity/Openethereum(참고: Parity는 더 이상 사용되지 않으며 이 클라이언트에 대한 지원은 향후 제거될 수 있습니다)
게스
베수
[지원되지만 손상됨] 이러한 클라이언트는 Chainlink에서 지원되지만 Chainlink가 이러한 실행 클라이언트에서 안정적으로 작동하지 못하게 하는 버그가 있습니다.
Nethermind 차단 문제:
NethermindEth/nethermind#4384
Erigon 차단 문제:
에리곤테크/에리곤#4946
erigontech/erigon#4030 (댓글)
소프트웨어가 지속적으로 업데이트되기 때문에 이더리움 노드에 대한 특정 버전 번호를 권장할 수는 없지만 일반적으로 사용 가능한 최신 버전을 실행해야 합니다.
참고 : 기본적으로 체인링크는 TLS 모드에서 실행됩니다. 로컬 개발의 경우 make chainlink-dev
사용하고 TOML 필드를 설정하여 dev build
사용하여 이를 비활성화할 수 있습니다.
[웹서버]SecureCookies = falseTLS.HTTPSPort = 0[보안되지 않음]DevWebServer = true
또는 tools/bin/self-signed-certs
사용하거나 수동으로 자체 서명된 인증서를 생성할 수 있습니다.
Chainlink 노드를 시작하려면 다음을 실행하세요.
체인링크 노드 시작
기본적으로 이는 포트 6688에서 시작됩니다. http://localhost:6688/에서 UI에 액세스할 수 있어야 합니다.
Chainlink는 UI뿐만 아니라 원격 CLI 클라이언트도 제공합니다. 노드가 시작되면 새 터미널 창을 열어 CLI를 사용할 수 있습니다. 먼저 클라이언트를 인증하려면 로그인해야 합니다.
체인링크 관리자 로그인
(원하는 경우 나중에 다시 로그인할 필요가 없도록 ADMIN_CREDENTIALS_FILE=/path/to/credentials/file
설정할 수도 있습니다.)
이제 다음을 사용하여 현재 작업을 볼 수 있습니다.
체인링크 작업 목록
Chainlink CLI에 대해 자세히 알아보려면 언제든지 chainlink help
실행할 수 있습니다.
작업을 생성하는 방법에 대해 자세히 알아보려면 작업에 대한 문서 페이지를 확인하세요.
노드 구성은 환경 변수의 조합과 API/UI/CLI를 통한 직접 설정으로 관리됩니다.
노드 구성 방법에 대한 자세한 내용은 공식 문서를 확인하세요.
외부 어댑터는 Chainlink를 쉽게 확장 가능하게 만들어 사용자 정의 계산과 특수 API의 간단한 통합을 제공합니다. Chainlink 노드는 간단한 REST API를 통해 외부 어댑터와 통신합니다.
외부 어댑터 생성 및 사용에 대한 자세한 내용은 외부 어댑터 페이지를 참조하세요.
우리는 Chainlink 구축, 서명 및 게시 작업 과정 중에 OIDC 키 없는 서명과 함께 cosign
서명을 사용합니다.
공식 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}"
npm을 통해 pnpm 9 설치
go generate ./...
실행하고 make abigen
수 있도록 gencodec 및 jq를 설치하십시오.
조롱 설치
make mockery
make
명령을 사용하면 올바른 버전이 설치됩니다.
계약 구축:
푸시 계약 pnpm 나 pnpm 컴파일:네이티브팝d
정적 자산 생성 및 컴파일:
생성하게 하다
개발 환경을 준비합니다.
테스트에는 postgres 데이터베이스가 필요합니다. 그러면 환경변수 CL_DATABASE_URL
_test
데이터베이스에 접속할 수 있는 값으로 설정되어야 하며, 사용자는 해당 _test
데이터베이스를 생성 및 삭제할 수 있어야 한다.
참고: 모든 테스트를 통과하려면 다른 환경 변수를 설정하면 안 됩니다.
적절한 테스트 사용자를 생성하기 위한 초기 설정을 위한 도우미 스크립트가 있습니다. postgres가 localhost의 포트 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
플래그는 백그라운드에서 테스트를 실행하기 위해 CPU 사용량을 제한하는 데 사용될 수 있습니다( -parallel=4
). 기본값은 GOMAXPROCS
입니다.
p
플래그는 패키지가 서로 간섭하는 경우 동시에 테스트되는 패키지 수를 제한하는 데 사용할 수 있습니다( -p=1
).
-short
플래그는 데이터베이스에 의존하는 테스트를 건너뛰므로 약 1분 안에 간단한 테스트를 신속하게 확인할 수 있습니다.
Go 1.1부터 런타임에는 -race
플래그로 활성화되는 데이터 경합 감지기가 포함됩니다. 이는 tools/bin/go_core_race_tests
스크립트를 통해 CI에서 사용됩니다. 작업이 경합을 감지하면 요약 페이지의 아티팩트에 자세한 스택 추적이 포함된 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부터는 fuzz 테스트 func FuzzXXX(*testing.F)
일반 테스트 모음의 일부로 포함되므로 기존 사례는 go test
로 실행됩니다.
또한 활성 퍼징을 실행하여 새 사례를 검색할 수 있습니다.
테스트 ./pkg/path -run=XXX -fuzz=FuzzTestName으로 이동하세요.
https://go.dev/doc/fuzz/
이 저장소에는 세 가지 Go 모듈이 포함되어 있습니다.
흐름도 RL
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/
디렉토리 내부:
종속성을 설치합니다.
pnpm 나
테스트 실행:
pnpm 테스트
참고: Chainlink는 현재 Foundry로 마이그레이션하는 중이며 일부 버전에는 Foundry 및 Hardhat 테스트가 모두 포함되어 있습니다. 자세한 내용은 Chainlink Foundry 문서에서 확인할 수 있습니다. src 디렉토리에 포함된 Foundry 테스트와 관련된 모든 't.sol' 파일은 Hardhat에서 무시됩니다.
Go generate는 이 프로젝트에서 모의 객체를 생성하는 데 사용됩니다. Mock은 mockery로 생성되며 코어/내부/mock에 존재합니다.
Nix 패키지 관리자와 함께 사용할 수 있도록 shell.nix가 제공됩니다. 기본적으로 Nix Flakes를 통해 셸을 활용합니다.
Nix는 선언적이고 재현 가능한 개발 환경을 정의합니다. Flakes 버전은 결정적, 고정( flake.lock
) 종속성을 사용하여 빌드된 아티팩트에 대해 더 많은 일관성/재현성을 얻습니다.
그것을 사용하려면:
시스템에 nix 패키지 관리자를 설치하십시오.
플레이크 지원 활성화
nix develop
실행하세요. 모든 종속성을 포함하는 쉘에 배치됩니다.
선택적으로 nix develop --command $SHELL
기본값(bash) 대신 현재 쉘을 사용합니다.
폴더에 cd
넣을 때 direnv
사용하여 자동으로 활성화할 수 있습니다. 이를 위해서는 nix-direnv를 활성화하고 use flake
.
로컬 postgres 데이터베이스를 만듭니다.
mkdir -p $PGDATA && cd $PGDATA/ initdb pg_ctl -l postgres.log -o "--unix_socket_directories='$PWD'" 시작 Createb chainlink_test -h localhost 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
우리는 변경 세트를 사용하여 libs 및 서비스의 버전 관리를 관리합니다.
구성이나 코드를 수정하는 모든 PR에는 변경 집합 파일이 함께 제공될 가능성이 높습니다.
changesets
설치하려면 다음을 수행하십시오.
pnpm
아직 설치되지 않은 경우 설치하십시오 - 문서.
pnpm install
실행하세요.
커밋을 생성한 후 또는 전에 pnpm changeset
명령을 실행하여 다음 릴리스의 CHANGELOG에 반영될 동반 변경 집합 항목을 생성합니다.
형식은 Keep a Changelog를 기반으로 합니다.
이 프로젝트는 Semantic Versioning을 준수합니다.
Chainlink를 구축하고 테스트하는 방법에 대한 자세한 내용은 개발 팁 페이지를 참조하세요.
Chainlink의 소스 코드에 대한 기여를 환영합니다.
자세한 내용은 기여 가이드라인을 확인하세요.
감사합니다!