Chainlink memperluas kemampuan kontrak pintar dengan memungkinkan akses ke data dunia nyata dan komputasi off-chain sambil menjaga jaminan keamanan dan keandalan yang melekat pada teknologi blockchain.
Repo ini berisi node dan kontrak inti Chainlink. Node inti adalah bundel biner yang tersedia untuk dijalankan oleh operator node yang berpartisipasi dalam jaringan oracle terdesentralisasi. Semua versi rilis utama memiliki gambar buruh pelabuhan bawaan yang tersedia untuk diunduh dari dockerhub Chainlink. Jika Anda tertarik untuk berkontribusi, silakan lihat pedoman kontribusi kami. Jika Anda di sini untuk melaporkan bug atau meminta fitur, silakan periksa Masalah yang sedang terbuka. Untuk informasi lebih lanjut tentang cara memulai Chainlink, lihat dokumentasi resmi kami. Sumber daya untuk pengembang Solidity dapat ditemukan di Chainlink Hardhat Box.
Chainlink memiliki komunitas yang aktif dan terus berkembang. Discord adalah saluran komunikasi utama yang digunakan untuk komunikasi sehari-hari, menjawab pertanyaan pengembangan, dan menggabungkan konten terkait Chainlink. Lihat dokumen komunitas untuk informasi lebih lanjut mengenai akun sosial Chainlink, berita, dan jaringan.
Instal Go 1.22, dan tambahkan direktori bin GOPATH Anda ke PATH Anda
Contoh Jalur untuk macOS export PATH=$GOPATH/bin:$PATH
& export GOPATH=/Users/$USER/go
Instal NodeJS v20 & pnpm v9 melalui npm.
Mungkin lebih mudah dalam jangka panjang menggunakan nvm untuk beralih antar versi node untuk proyek yang berbeda. Misalnya, dengan asumsi $NODE_VERSION disetel ke versi NodeJS yang valid, Anda dapat menjalankan: nvm install $NODE_VERSION && nvm use $NODE_VERSION
Instal Postgres (>= 12.x). Disarankan untuk menjalankan postgres versi utama terbaru.
Perhatikan jika Anda menjalankan image buruh pelabuhan Chainlink resmi, versi Postgres tertinggi yang didukung adalah 16.x karena klien yang dibundel.
Anda harus mengonfigurasi Postgres untuk menggunakan koneksi SSL (atau untuk pengujian, Anda dapat menyetel ?sslmode=disable
di string kueri Postgres Anda).
Pastikan Anda telah menginstal Python 3 (ini diperlukan oleh solc-select yang diperlukan untuk mengkompilasi kontrak soliditas)
Unduh Chainlink: git clone https://github.com/smartcontractkit/chainlink && cd chainlink
Bangun dan instal Chainlink: make install
Jalankan node: chainlink help
Untuk informasi terbaru tentang menyiapkan lingkungan pengembangan, lihat Panduan Penyiapan Pengembangan.
Versi asli dari Apple Silicon seharusnya bisa langsung digunakan, tetapi image Docker memerlukan lebih banyak pertimbangan.
$pembangunan buruh pelabuhan. -t chainlink-develop:terbaru -f ./core/chainlink.Dockerfile
Untuk menjalankan node Chainlink Anda harus memiliki akses ke node Ethereum yang sedang berjalan dengan koneksi websocket terbuka. Jaringan berbasis Ethereum apa pun akan berfungsi setelah Anda mengonfigurasi ID rantai. Versi node Ethereum yang saat ini diuji dan didukung:
[Dukungan resmi]
Paritas/Openethereum (CATATAN: Paritas tidak digunakan lagi dan dukungan untuk klien ini mungkin akan dihapus di masa mendatang)
Geth
Besu
[Didukung tetapi rusak] Klien ini didukung oleh Chainlink, tetapi memiliki bug yang mencegah Chainlink bekerja dengan andal pada klien eksekusi ini.
Masalah Pemblokiran Nethermind:
NethermindEth/nethermind#4384
Masalah Pemblokiran Erigon:
erigontech/erigon#4946
erigontech/erigon#4030 (komentar)
Kami tidak dapat merekomendasikan nomor versi spesifik untuk node ethereum karena perangkat lunak terus diperbarui, namun Anda biasanya harus mencoba menjalankan versi terbaru yang tersedia.
CATATAN : Secara default, chainlink akan berjalan dalam mode TLS. Untuk pengembangan lokal, Anda dapat menonaktifkan ini dengan menggunakan dev build
menggunakan make chainlink-dev
dan mengatur bidang TOML:
[WebServer]SecureCookies = falseTLS.HTTPSPort = 0[Tidak aman]DevWebServer = true
Alternatifnya, Anda dapat membuat sertifikat yang ditandatangani sendiri menggunakan tools/bin/self-signed-certs
atau secara manual.
Untuk memulai node Chainlink Anda, jalankan saja:
simpul rantai dimulai
Secara default, ini akan dimulai pada port 6688. Anda seharusnya dapat mengakses UI di http://localhost:6688/.
Chainlink menyediakan klien CLI jarak jauh serta UI. Setelah node Anda dimulai, Anda dapat membuka jendela terminal baru untuk menggunakan CLI. Anda harus masuk untuk mengotorisasi klien terlebih dahulu:
login admin tautan rantai
(Anda juga dapat mengatur ADMIN_CREDENTIALS_FILE=/path/to/credentials/file
di masa mendatang jika Anda mau, untuk menghindari keharusan login lagi).
Sekarang Anda dapat melihat pekerjaan Anda saat ini dengan:
daftar pekerjaan chainlink
Untuk mengetahui lebih lanjut tentang Chainlink CLI, Anda selalu dapat menjalankan chainlink help
.
Lihat halaman dokumen tentang Pekerjaan untuk mempelajari lebih lanjut tentang cara membuat Pekerjaan.
Konfigurasi node dikelola oleh kombinasi variabel lingkungan dan pengaturan langsung melalui API/UI/CLI.
Periksa dokumentasi resmi untuk informasi lebih lanjut tentang cara mengkonfigurasi node Anda.
Adaptor eksternal membuat Chainlink mudah diperluas, menyediakan integrasi sederhana dari komputasi khusus dan API khusus. Node Chainlink berkomunikasi dengan adaptor eksternal melalui REST API sederhana.
Untuk informasi lebih lanjut tentang membuat dan menggunakan adaptor eksternal, silakan lihat halaman adaptor eksternal kami.
Kami menggunakan cosign
dengan penandatanganan tanpa kunci OIDC selama alur kerja Build, Sign, dan Publish Chainlink.
Dianjurkan bagi setiap operator node yang membangun dari gambar buruh pelabuhan Chainlink resmi untuk memverifikasi bahwa versi rilis yang diberi tag memang dibuat dari alur kerja ini.
Anda memerlukan cosign
untuk melakukan verifikasi ini. Ikuti instruksi di sini untuk menginstal cosign.
# tag adalah versi rilis yang diberi tag - yaitu. v2.16.0cosign verifikasi 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}"
Instal pnpm 9 melalui npm
Instal gencodec dan jq untuk dapat menjalankan go generate ./...
dan make abigen
Instal ejekan
make mockery
Menggunakan perintah make
akan menginstal versi yang benar.
Membangun kontrak:
kontrak pushd pnpm i kompilasi pnpm: nativepopd
Hasilkan dan kompilasi aset statis:
membuat menghasilkan
Siapkan lingkungan pengembangan Anda:
Tes ini memerlukan database postgres. Pada gilirannya, variabel lingkungan CL_DATABASE_URL
harus disetel ke nilai yang dapat terhubung ke database _test
, dan pengguna harus dapat membuat dan menghapus database _test
yang diberikan.
Catatan: Variabel lingkungan lain tidak boleh disetel agar semua pengujian dapat lulus
Ada skrip pembantu untuk pengaturan awal untuk membuat pengguna uji yang sesuai. Postgres harus dijalankan di localhost pada port 5432. Anda akan dimintai kata sandi pengguna postgres
buat setup-testdb
Skrip ini akan menyimpan CL_DATABASE_URL
di .dbenv
Perubahan pada database memerlukan migrasi untuk dijalankan. Demikian pula, pull
repo mungkin memerlukan migrasi agar dapat dijalankan. Setelah pengaturan satu kali di atas:
source .dbenv make testdb
Jika Anda menemukan kesalahan database accessed by other users (SQLSTATE 55006) exit status 1
dan Anda ingin memaksa pembuatan database lalu gunakan
source .dbenv make testdb-force
Jalankan tes:
ayo tes ./...
Bendera parallel
dapat digunakan untuk membatasi penggunaan CPU, untuk menjalankan pengujian di latar belakang ( -parallel=4
) - defaultnya adalah GOMAXPROCS
Flag p
dapat digunakan untuk membatasi jumlah paket yang diuji secara bersamaan, jika paket tersebut mengganggu satu sama lain ( -p=1
)
Bendera -short
melewatkan pengujian yang bergantung pada database, untuk memeriksa pengujian yang lebih sederhana dengan cepat dalam waktu sekitar satu menit
Pada Go 1.1, runtime menyertakan detektor data race, yang diaktifkan dengan flag -race
. Ini digunakan di CI melalui skrip tools/bin/go_core_race_tests
. Jika tindakan mendeteksi perlombaan, artefak di halaman ringkasan akan menyertakan race.*
dengan pelacakan tumpukan terperinci.
Ini tidak akan memberikan hasil positif palsu, jadi tanggapi peringatannya dengan serius.
Untuk deteksi ras lokal yang ditargetkan, Anda dapat menjalankan:
GORACE="log_path=$PWD/race" lanjutkan tes -race ./core/path/to/pkg -hitung 10 GORACE="log_path=$PWD/race" lanjutkan tes -ras ./core/path/to/pkg -hitung 100 -jalankan TestFooBar/sub_test
https://go.dev/doc/articles/race_detector
Mulai Go 1.18, pengujian fuzz func FuzzXXX(*testing.F)
disertakan sebagai bagian dari rangkaian pengujian normal, sehingga kasus yang ada dieksekusi dengan go test
.
Selain itu, Anda dapat menjalankan fuzzing aktif untuk mencari kasus baru:
lanjutkan tes ./pkg/path -run=XXX -fuzz=FuzzTestName
https://go.dev/doc/fuzz/
Repositori ini berisi tiga modul Go:
diagram alur 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
Memuat integration-tests
dan modul core/scripts
mengimpor modul root menggunakan penggantian relatif pada file go.mod
, sehingga perubahan ketergantungan pada root go.mod
sering kali memerlukan perubahan pada modul tersebut juga. Setelah melakukan perubahan, go mod tidy
dapat dijalankan pada ketiga modul menggunakan:
make gomodtidy
Di dalam direktori contracts/
:
Instal dependensi:
pnpm i
Jalankan tes:
tes pnpm
CATATAN: Chainlink saat ini sedang dalam proses migrasi ke Foundry dan berisi pengujian Foundry dan Hardhat di beberapa versi. Informasi lebih lanjut dapat ditemukan di sini: Dokumentasi Chainlink Foundry. File 't.sol' apa pun yang terkait dengan pengujian Foundry, yang terdapat dalam direktori src akan diabaikan oleh Hardhat.
Go generate digunakan untuk menghasilkan tiruan dalam proyek ini. Tiruan dihasilkan dengan ejekan dan hidup di inti/internal/tiruan.
Shell.nix disediakan untuk digunakan dengan manajer paket Nix. Secara default, kami menggunakan shell melalui Nix Flakes.
Nix mendefinisikan lingkungan pengembangan yang deklaratif dan dapat direproduksi. Versi serpihan menggunakan dependensi deterministik dan beku ( flake.lock
) untuk mendapatkan lebih banyak konsistensi/reprodusibilitas pada artefak yang dibuat.
Untuk menggunakannya:
Instal manajer paket nix di sistem Anda.
Aktifkan dukungan serpihan
Jalankan nix develop
. Anda akan dimasukkan ke dalam shell yang berisi semua dependensi.
Secara opsional, nix develop --command $SHELL
akan menggunakan shell Anda saat ini, bukan default (bash).
Anda dapat menggunakan direnv
untuk mengaktifkannya secara otomatis saat cd
-ing ke dalam folder; untuk itu, aktifkan nix-direnv dan use flake
di atasnya.
Buat database postgres lokal:
mkdir -p $PGDATA && cd $PGDATA/ initdb pg_ctl -l postgres.log -o "--unix_socket_directories='$PWD'" mulai dibuatb chainlink_test -h localhost createuser --superuser --password chainlink -h localhost# lalu ketikkan kata sandi percobaan, misalnya: chainlink, dan atur di shell.nix CL_DATABASE_URL
Saat masuk kembali ke proyek, Anda dapat memulai ulang postgres: cd $PGDATA; pg_ctl -l postgres.log -o "--unix_socket_directories='$PWD'" start
Sekarang Anda dapat menjalankan tes atau mengkompilasi kode seperti biasa.
Setelah selesai, hentikan: cd $PGDATA; pg_ctl -o "--unix_socket_directories='$PWD'" stop
Kami menggunakan perubahan untuk mengelola pembuatan versi untuk lib dan layanan.
Setiap PR yang mengubah konfigurasi atau kode apa pun, kemungkinan besar harus disertai dengan file set perubahan.
Untuk menginstal changesets
:
Instal pnpm
jika belum diinstal - dokumen.
Jalankan pnpm install
.
Baik setelah atau sebelum Anda membuat komit, jalankan perintah pnpm changeset
untuk membuat entri perubahan yang menyertainya yang akan tercermin pada CHANGELOG untuk rilis berikutnya.
Formatnya didasarkan pada Keep a Changelog,
dan proyek ini menganut Versi Semantik.
Untuk tips lebih lanjut tentang cara membangun dan menguji Chainlink, lihat halaman tips pengembangan kami.
Kontribusi dipersilakan untuk kode sumber Chainlink.
Silakan lihat pedoman kontribusi kami untuk lebih jelasnya.
Terima kasih!