يرجى الانتباه إلى أن chainlink تتم إزالة أي واجهة برمجة تطبيقات من مجموعة المبتدئين هذه لأن chainlink يتم استبدال أي واجهة برمجة تطبيقات حاليًا بوظائف chainlink. يرجى العثور على طقم المبتدئين لوظائف chainlink هنا
تنفيذ ميزات سلسلة سلسلة 3 التالية باستخدام بيئة تطوير Hardhat:
لوظائف chainlink ، يرجى الانتقال إلى مجموعات Tarter هذه: Hardhat | مسبك (قريبا)
لـ ChainLink CCIP (سلسلة متداخلات متداخل prototocol) ، يرجى الانتقال إلى مجموعات المبتدئين هذه: Hardhat | مسبك
يوصى بأن تكون قد مررت بوثائق Hardhat للبدء قبل المتابعة هنا.
git --version
ورؤية استجابة مثل git version xxx
node --version
على إخراج مثل: vx.xx
npm
yarn --version
واحصل على إخراج مثل: xxx
إذا كنت على دراية بـ
npx
وnpm
بدلاً منyarn
، فيمكنك استخدامnpx
للتنفيذ وnpm
لتثبيت التبعيات.
بعد تثبيت جميع المتطلبات ، قم بتشغيل ما يلي:
git clone https://github.com/smartcontractkit/hardhat-starter-kit/
cd hardhat-starter-kit
ثم:
npm install
التوصية هي استخدام NPM 7 أو الأحدث. إذا كنت تستخدم إصدارًا أقدم من NPM ، فستحتاج أيضًا إلى تثبيت جميع الحزم المستخدمة بواسطة صندوق الأدوات.
npm install --save-dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers @nomiclabs/hardhat-ethers @nomiclabs/hardhat-etherscan chai ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v5 @ethersproject/abi @ethersproject/providers
هذا هو الحال أيضًا إذا كنت تستخدم الغزل.
yarn add --dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers @nomiclabs/hardhat-ethers @nomiclabs/hardhat-etherscan chai ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v5 @ethersproject/abi @ethersproject/providers
npx hardhat test
أو
npm run test
أو
yarn test
لاستخدام TypeScript ، قم بتشغيل:
git checkout typescript
npm install
إذا قمت بتشغيل npx hardhat --help
على إخراج من جميع المهام التي يمكنك تشغيلها.
npm run deploy
سيؤدي ذلك إلى نشر عقودك على شبكة محلية. بالإضافة إلى ذلك ، إذا كانت على شبكة محلية ، فسيقوم بنشر عقود سلسلة MockLink لكي تتفاعل معها. إذا كنت ترغب في التفاعل مع عقودك المنشورة ، فانتقل إلى التفاعل مع العقود المنتشرة.
واحدة من أفضل الطرق للاختبار والتفاعل مع العقود الذكية هي استخدام شبكة محلية. لتشغيل شبكة محلية مع جميع عقودك فيه ، قم بتنفيذ الأمر التالي:
npx hardhat node
You'll get a local blockchain, private keys, contracts deployed (from the deployment
folder scripts), and an endpoint to potentially add to an EVM wallet.
في hardhat.config.js
سترى قسم مثل:
module.exports = {
defaultNetwork: "hardhat",
networks: {
هذا القسم من الملف هو المكان الذي تحدد فيه الشبكات التي تريد التفاعل معها. يمكنك قراءة المزيد حول هذا الملف بأكمله في وثائق Hardhat.
للتفاعل مع شبكة مباشرة أو اختبار ، ستحتاج:
دعونا نلقي نظرة على مثال على إعدادها باستخدام Sepolia testnet.
أولاً ، سنحتاج إلى تعيين متغيرات البيئة. يمكننا القيام بذلك عن طريق ضبطها في ملف .env
الخاص بنا (أنشئه إذا لم يكن هناك). يمكنك أيضًا قراءة المزيد حول متغيرات البيئة من مدونة Twilio المرتبطة. ستجد عينة من شكل هذا الملف في .env.example
هام: تأكد من أنك لن تكشف المفاتيح التي وضعتها في ملف
.env
. من خلال ذلك ، أقصد ألا تدفعهم إلى ريبو عام ، ويرجى محاولة الاحتفاظ بها مفاتيح تستخدمها في التطوير غير المرتبطة بأي أموال حقيقية.
SEPOLIA_RPC_URL
.يمكنك الحصول على واحدة خالية من الخيمياء أو الهفو أو الأخلاق. هذا هو اتصالك بـ blockchain.
PRIVATE_KEY
. هذا هو مفتاحك الخاص من محفظتك ، أي metamask. هذا مطلوب لنشر العقود على الشبكات العامة. يمكنك اختياريًا تعيين متغير البيئة MNEMONIC
بدلاً من ذلك مع بعض التغييرات على hardhat.config.js
.
تحذير
عند التطوير ، من أفضل الممارسات استخدام metamask لا يرتبط بأي أموال حقيقية. هناك طريقة جيدة للقيام بذلك وهي إنشاء ملف تعريف للمتصفح الجديد (على Chrome ، الشجاع ، Firefox ، إلخ) وتثبيت Metamask على هذا المتصفح ، وعدم إرسال هذه المحفظة.
لا تلتزم وادفع أي تغييرات على ملفات .env التي قد تحتوي على معلومات حساسة ، مثل المفتاح الخاص! إذا وصلت هذه المعلومات إلى مستودع github العام ، فيمكن لشخص ما استخدامه للتحقق مما إذا كان لديك أي صناديق رئيسية في عنوان المحفظة ، وسرقةها!
.env
مثال:
SEPOLIA_RPC_URL='https://sepolia.infura.io/v3/asdfadsfafdadf'
PRIVATE_KEY='abcdef'
مثال bash
:
export SEPOLIA_RPC_URL='https://sepolia.infura.io/v3/asdfadsfafdadf'
export PRIVATE_KEY='abcdef'
You can also use a
MNEMONIC
instead of aPRIVATE_KEY
environment variable by uncommenting the section in thehardhat.config.js
, and commenting out thePRIVATE_KEY
line. لكن هذا لا ينصح به.
بالنسبة للشبكات الأخرى مثل MainNet و Polygon ، يمكنك استخدام متغيرات البيئة المختلفة لعنوان URL RPC الخاص بك ومفتاحك الخاص. انظر hardhat.config.js
لمعرفة المزيد.
توجه إلى حنفيات Chainlink واحصل على بعض ETH والرابط. يرجى اتباع وثائق chainlink إذا كان غير مألوف.
توجه إلى صفحة الاشتراك VRF وإنشاء الاشتراك الجديد. احفظ معرف الاشتراك الخاص بك ووضعه في ملف helper-hardhat-config.js
subscriptionId
يجب أن تكون الآن كل الإعداد! يمكنك تشغيل أي أمر وتمرير فقط --network sepolia
الآن!
لنشر العقود:
npm run deploy --network sepolia
لتشغيل اختبارات اختبار التدريج
npm run test-staging
إذا كنت ترغب في إجراء اختبارات على شبكة متشعب ، اتبع هذه الخطوات:
MAINNET_RPC_URL
الذي يتصل بـ MainNet.FORKING_BLOCK_NUMBER
. إذا تم تجاهلها ، فسيستخدم أحدث كتلة في كل مرة يمكن أن تؤدي إلى اختبار عدم الاتساق.enabled
على ميزة Forking true
/ false
لتمكين / تعطيل forking: {
url: MAINNET_RPC_URL,
blockNumber: FORKING_BLOCK_NUMBER,
enabled: false,
}
توجد الاختبارات في دليل الاختبار ، ويتم تقسيمها بين اختبارات الوحدة واختبارات التدريج/الاختبار. يجب إجراء اختبارات الوحدة فقط على البيئات المحلية ، ويجب إجراء اختبارات التدريج فقط على البيئات الحية.
لتشغيل اختبارات الوحدة:
npx hardhat test
أو
npm run test
أو
yarn test
لتشغيل اختبارات التدريج على شبكة Sepolia:
npx hardhat test --network sepolia
أو
npm run test-staging
نظرًا لأن جميع الاختبارات مكتوبة بطريقة مستقلة عن بعضها البعض ، يمكنك توفير الوقت عن طريق تشغيلها بالتوازي. تأكد من أن AUTO_FUND=false
Inside .env
. هناك بعض القيود مع الاختبارات المتوازية ، اقرأ المزيد عنها هنا
لتشغيل الاختبارات بالتوازي:
npx hardhat test --parallel
أو
npm run test --parallel
بعد نشر عقودك ، سيمنحك إخراج النشر عناوين العقد عند نشرها. يمكنك بعد ذلك استخدام عناوين العقد هذه بالاقتران مع مهام Hardhat لأداء العمليات في كل عقد.
يحتوي عقد المستهلك في Price Feeds على مهمة واحدة ، لقراءة أحدث سعر لعقد تغذية الأسعار المحدد
npx hardhat read-price-feed --contract insert-contract-address-here --network network
يحتوي عقد VRFConsumer على مهمتين ، واحدة لطلب رقم عشوائي ، وواحد لقراءة نتيجة طلب الرقم العشوائي. كما هو موضح في وثائق المطور ، هناك طريقتان:
اقرأ المستندات أولاً لفهم الطريقة الأكثر ملاءمة لحالة الاستخدام الخاصة بك.
للبدء ، انتقل إلى صفحة الاشتراك VRF وإنشاء الاشتراك الجديد. احفظ معرف الاشتراك الخاص بك ووضعه في ملف helper-hardhat-config.js
subscriptionId
:
5 : {
// rest of the config
subscriptionId : "777"
}
بعد ذلك ، نشر مستهلك عقد VRF V2 على شبكة اشتراكك الأخير باستخدام معرف الاشتراك كوسيطة مُنشأة.
npm run deploy --network network
أخيرًا ، تحتاج إلى الذهاب إلى صفحة الاشتراك الخاصة بك مرة أخرى وإضافة عنوان العقد المنشور كمستهلك جديد. بمجرد الانتهاء من ذلك ، يمكنك تنفيذ طلب VRF مع مهمة رقم REDUST RANDOM:
npx hardhat request-random-number --contract insert-contract-address-here --network network
بمجرد تقديم طلب للحصول على رقم عشوائي بنجاح ، يمكنك رؤية النتيجة عبر مهمة قراءة العشبية:
npx hardhat read-random-number --contract insert-contract-address-here --network network
نشر مستهلك عقد VRF V2 على الشبكة.
npm run deploy --network network
أو (إذا كنت تستخدم الغزل)
yarn deploy --network network
الآن عليك تمويل عقد المستهلك الخاص بك مع رموز Link:
npx hardhat transfer-link --recipient insert-contract-address-here --amount insert-amount-in-juels-here --network network
بمجرد الانتهاء من ذلك ، يمكنك تنفيذ طلب VRF مع مهمة رقم REDUST RANDOM:
npx hardhat request-random-number-direct-funding --callbackgaslimit insert-callback-gas-limit-here --requestconfirmations insert-request-confirmations-here --numwords insert-number-words-here --contract insert-contract-address-here --network network
بمجرد تقديم طلب للحصول على رقم عشوائي بنجاح ، يمكنك رؤية النتيجة عبر مهمة قراءة العشبية:
npx hardhat read-random-number-direct-funding --contract insert-contract-address-here --network network
يعد عقد AutomationCounter عقدًا بسيطًا للتمكين لأتمتة سلسلة SainLink يحتفظ ببساطة بمتغير مضاد يتم زيادة في كل مرة يتم تنفيذ مهمة Performupkeep بواسطة أتمتة chainlink. بمجرد نشر العقد ، يجب عليك التوجه إلى https://automation.chain.link/ لتسجيله لصيانة الصيانة ، ثم يمكنك استخدام المهمة أدناه لعرض المتغير المضاد الذي يزداد بواسطة Automation ChainLink
npx hardhat read-automation-counter --contract insert-contract-address-here --network network
ستحتاج إلى متغير بيئة ETHERSCAN_API_KEY
. يمكنك الحصول على واحد من موقع Etherscan API .. إذا تم تعيينه ، فسيحاول البرنامج النصي الخاص بك التحقق منه افتراضيًا ، ولكن إذا كنت ترغب في التحقق من أي يدوي ، فيمكنك تشغيل:
npx hardhat verify --network <NETWORK> <CONTRACT_ADDRESS> <CONSTRUCTOR_PARAMETERS>
مثال:
npx hardhat verify --network sepolia 0x9279791897f112a41FfDa267ff7DbBC46b96c296 "0x694AA1769357215DE4FAC081bf1f309aDC325306"
هذا سوف يرتبع عقودك الذكية.
npm run lint:fix
سيؤدي ذلك إلى تنسيق كل من JavaScript و Slidity لتبدو أجمل.
npm run format
لتقدير الغاز ، ما عليك سوى تعيين متغير بيئة REPORT_GAS
إلى True ، ثم تشغيله:
npx hardhat test
إذا كنت ترغب في رؤية أسعار الغاز بالدولار الأمريكي أو عملة أخرى ، فأضف COINMARKETCAP_API_KEY
من CoinmarketCap.
لرؤية تدبير في المئة من الدرجة التي يتم بها تنفيذ رمز مصدر العقد الذكي عند تشغيل مجموعة اختبار معينة ، اكتب
npm run coverage
سنستخدم Echidna كأداة اختبار Fuzz. تحتاج إلى تثبيت Docker مع تخصيص ذاكرة افتراضية على الأقل 8 جيجا بايت (لتحديث هذه المعلمة ، انتقل إلى الإعدادات-> الموارد-> المتقدمة- الذاكرة ).
لبدء تشغيل مثيل Echidna
npm run fuzzing
إذا كنت تستخدمه لأول مرة ، فستحتاج إلى انتظار Docker لتنزيل صورة ETH-Security-Toolbox بالنسبة لنا.
لبدء تشغيل الجري
echidna-test /src/contracts/test/fuzzing/AutomationCounterEchidnaTest.sol --contract AutomationCounterEchidnaTest --config /src/contracts/test/fuzzing/config.yaml
للخروج من نوع Echidna
exit
المساهمات دائما موضع ترحيب! افتح العلاقات العامة أو مشكلة!