تعمل Chainlink على توسيع قدرات العقود الذكية من خلال تمكين الوصول إلى بيانات العالم الحقيقي والحسابات خارج السلسلة مع الحفاظ على ضمانات الأمان والموثوقية المتأصلة في تقنية blockchain.
يحتوي هذا الريبو على عقدة وعقود Chainlink الأساسية. العقدة الأساسية هي العقدة الثنائية المجمعة المتوفرة ليتم تشغيلها بواسطة مشغلي العقد المشاركين في شبكة أوراكل اللامركزية. تحتوي جميع إصدارات الإصدار الرئيسية على صور عامل إرساء مُصممة مسبقًا متاحة للتنزيل من Chainlink dockerhub. إذا كنت مهتمًا بالمساهمة، فيرجى الاطلاع على إرشادات المساهمة الخاصة بنا. إذا كنت هنا للإبلاغ عن خطأ أو طلب ميزة، فيرجى التحقق من المشكلات المفتوحة حاليًا. لمزيد من المعلومات حول كيفية البدء مع Chainlink، راجع وثائقنا الرسمية. يمكن العثور على الموارد الخاصة بمطوري Solidity في صندوق Chainlink Hardhat.
لدى Chainlink مجتمع نشط ومتزايد باستمرار. Discord هي قناة الاتصال الأساسية المستخدمة للتواصل اليومي والإجابة على أسئلة التطوير وتجميع المحتوى المتعلق بـ Chainlink. قم بإلقاء نظرة على مستندات المجتمع للحصول على مزيد من المعلومات حول حسابات Chainlink الاجتماعية والأخبار والشبكات.
قم بتثبيت Go 1.22، وأضف دليل حاوية 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 وهو مطلوب لتجميع عقود الصلابة)
تنزيل 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 قيد التشغيل مع اتصال websocket مفتوح. ستعمل أي شبكة تعتمد على Ethereum بمجرد تكوين معرف السلسلة. إصدارات عقدة Ethereum التي تم اختبارها ودعمها حاليًا:
[مدعوم رسميًا]
التكافؤ/Openethereum (ملاحظة: تم إهمال التكافؤ وقد تتم إزالة الدعم لهذا العميل في المستقبل)
جيث
بيسو
[مدعوم ولكن معطل] يتم دعم هؤلاء العملاء بواسطة Chainlink، ولكن لديهم أخطاء تمنع Chainlink من العمل بشكل موثوق على عملاء التنفيذ هؤلاء.
مشاكل حظر Nethermind:
نيثيرمايندEth/نيثرمايند#4384
مشاكل حظر Erigon:
erigontech/erigon#4946
erigontech/erigon#4030 (تعليق)
لا يمكننا أن نوصي بأرقام إصدارات محددة لعقد الإيثيريوم نظرًا لأن البرنامج يتم تحديثه باستمرار، ولكن يجب عليك عادةً محاولة تشغيل أحدث إصدار متاح.
ملاحظة : افتراضيًا، سيتم تشغيل chainlink في وضع TLS. بالنسبة للتطوير المحلي، يمكنك تعطيل هذا باستخدام dev build
باستخدام make chainlink-dev
وتعيين حقول TOML:
[WebServer]SecureCookies = falseTLS.HTTPSPort = 0[غير آمن]DevWebServer = صحيح
وبدلاً من ذلك، يمكنك إنشاء شهادات موقعة ذاتيًا باستخدام tools/bin/self-signed-certs
أو يدويًا.
لبدء عقدة Chainlink الخاصة بك، ما عليك سوى تشغيل:
تبدأ عقدة chainlink
سيبدأ هذا افتراضيًا على المنفذ 6688. ومن المفترض أن تكون قادرًا على الوصول إلى واجهة المستخدم على http://localhost:6688/.
يوفر Chainlink عميل CLI عن بعد بالإضافة إلى واجهة مستخدم. بمجرد بدء عقدتك، يمكنك فتح نافذة طرفية جديدة لاستخدام واجهة سطر الأوامر (CLI). ستحتاج إلى تسجيل الدخول لتخويل العميل أولاً:
تسجيل دخول مسؤول chainlink
(يمكنك أيضًا تعيين ADMIN_CREDENTIALS_FILE=/path/to/credentials/file
في المستقبل إذا أردت، لتجنب الاضطرار إلى تسجيل الدخول مرة أخرى).
يمكنك الآن عرض وظائفك الحالية من خلال:
قائمة وظائف تشين لينك
لمعرفة المزيد حول Chainlink CLI، يمكنك دائمًا تشغيل chainlink help
.
راجع صفحات المستند الخاصة بالوظائف لمعرفة المزيد حول كيفية إنشاء الوظائف.
تتم إدارة تكوين العقدة من خلال مجموعة من متغيرات البيئة والإعداد المباشر عبر API/UI/CLI.
تحقق من الوثائق الرسمية لمزيد من المعلومات حول كيفية تكوين العقدة الخاصة بك.
المحولات الخارجية هي التي تجعل Chainlink قابلة للتوسعة بسهولة، مما يوفر تكاملًا بسيطًا للحسابات المخصصة وواجهات برمجة التطبيقات المتخصصة. تتواصل عقدة Chainlink مع المحولات الخارجية عبر REST API البسيط.
لمزيد من المعلومات حول إنشاء المحولات الخارجية واستخدامها، يرجى الاطلاع على صفحة المحولات الخارجية الخاصة بنا.
نحن نستخدم cosign
مع التوقيع بدون مفتاح OIDC أثناء سير عمل Build وSign وPublish Chainlink.
من المشجع لأي مشغل عقدة يبني من صورة عامل الإرساء الرسمي لـ Chainlink التحقق من أن إصدار الإصدار الموسوم قد تم إنشاؤه بالفعل من سير العمل هذا.
سوف تحتاج إلى cosign
من أجل القيام بهذا التحقق. اتبع التعليمات هنا لتثبيت cosign.
# العلامة هي نسخة الإصدار الموسومة - أي. v2.16.0cosign تحقق من public.ecr.aws/chainlink/chainlink:${tag} --certificate-oidc-issuer https://token.actions.githubusercontent.com --هوية الشهادة "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
إلى تثبيت الإصدار الصحيح.
بناء العقود:
العقود المدفوعة بنبم ط ترجمة pnpm: Nativepopd
إنشاء وتجميع الأصول الثابتة:
جعل توليد
قم بإعداد بيئة التطوير الخاصة بك:
تتطلب الاختبارات قاعدة بيانات postgres. في المقابل، يجب تعيين متغير البيئة CL_DATABASE_URL
على القيمة التي يمكنها الاتصال بقاعدة بيانات _test
، ويجب أن يكون المستخدم قادرًا على إنشاء قاعدة بيانات _test
المحددة وإسقاطها.
ملاحظة: لا ينبغي تعيين متغيرات البيئة الأخرى حتى تنجح كافة الاختبارات
يوجد برنامج نصي مساعد للإعداد الأولي لإنشاء مستخدم اختبار مناسب. يتطلب تشغيل postgres على المضيف المحلي على المنفذ 5432. سيُطلب منك كلمة مرور مستخدم postgres
قم بإجراء اختبار الإعداد
سيحفظ هذا البرنامج النصي 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" اذهب للاختبار - السباق ./core/path/to/pkg -count 10 GORACE = "log_path=$PWD/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
ملحوظة: Chainlink حاليًا في طور الترحيل إلى Foundry ويحتوي على اختبارات Foundry وHardhat في بعض الإصدارات. يمكن العثور على مزيد من المعلومات هنا: وثائق مسبك Chainlink. سيتم تجاهل أي ملفات 't.sol' مرتبطة باختبارات Foundry، والمضمنة في أدلة src، بواسطة Hardhat.
يتم استخدام Go generator لإنشاء نماذج وهمية في هذا المشروع. يتم إنشاء النماذج باستخدام السخرية وتعيش في النواة/الداخلية/المحاكاة.
يتم توفير shell.nix للاستخدام مع مدير الحزم Nix. بشكل افتراضي، نستخدم القشرة من خلال Nix Flakes.
يحدد Nix بيئة تطوير تعريفية وقابلة للتكرار. يستخدم إصدار الرقائق تبعيات حتمية ومجمدة ( 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'" ابدأ createb 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
نحن نستخدم مجموعات التغييرات لإدارة إصدارات libs والخدمات.
من المرجح أن يكون كل PR يقوم بتعديل أي تكوين أو تعليمات برمجية مصحوبًا بملف مجموعة التغييرات.
لتثبيت changesets
:
قم بتثبيت pnpm
إذا لم يكن مثبتًا بالفعل - المستندات.
قم بتشغيل pnpm install
.
إما بعد أو قبل إنشاء الالتزام، قم بتشغيل الأمر pnpm changeset
لإنشاء إدخال مجموعة تغييرات مصاحب والذي سينعكس في سجل التغيير للإصدار التالي.
يعتمد التنسيق على الاحتفاظ بسجل التغيير،
ويلتزم هذا المشروع بالإصدار الدلالي.
لمزيد من النصائح حول كيفية إنشاء Chainlink واختباره، راجع صفحة نصائح التطوير الخاصة بنا.
نرحب بالمساهمات في كود مصدر Chainlink.
يرجى مراجعة إرشادات المساهمة لدينا لمزيد من التفاصيل.
شكرًا لك!