التحقق من البرامج
يهدف هذا الدليل إلى أن يكون مرجعًا للمطورين الذين يرغبون في تنفيذ عمليات البناء المتحقق منها لبرامجهم على سولانا. سنغطي ماهية البناءات المتحقق منها، وكيفية استخدامها، والاعتبارات الخاصة، وأفضل الممارسات لضمان أصالة برنامجك على السلسلة.
ما هي البناءات المتحقق منها؟
تضمن البناءات المتحقق منها أن البرنامج القابل للتنفيذ الذي تنشره على شبكة سولانا يتطابق مع كود المصدر في مستودعك. من خلال القيام بذلك، يمكن للمطورين والمستخدمين أن يثقوا بأن البرنامج الذي يعمل على السلسلة يتوافق تمامًا مع قاعدة الكود العامة، مما يعزز الشفافية والأمان.
تتضمن عملية التحقق مقارنة تجزئة البرنامج على السلسلة مع تجزئة البرنامج المبني محليًا من كود المصدر. هذا يضمن عدم وجود تناقضات بين النسختين.
على الرغم من أنه لا ينبغي اعتبار البناء المتحقق منه أكثر أمانًا من البناء غير المتحقق منه، فإن البناء يمكّن المطورين من التحقق ذاتيًا من أن كود المصدر يتطابق مع ما تم نشره على السلسلة. باستخدام كود المصدر، يمكن للمطور بعد ذلك التحقق مما ينفذه الكود عند إرسال معاملة.
تم تصميم خط أنابيب البناءات المتحقق منها والحفاظ عليه بواسطة Ellipsis Labs وOtterSec. لمزيد من التفاصيل، اتبع الدليل في مستودع البناءات المتحقق منها الأصلي وكذلك عملية التحقق من البناء مباشرة في مجموعة أدوات Anza، بمجرد دعمها هناك.
كيف يعمل ذلك؟
تتم عملية التحقق من خلال مقارنة التجزئة (hash) للبرنامج الموجود على السلسلة مع التجزئة للبرنامج المبني محليًا من الكود المصدري. تقوم ببناء برنامجك في بيئة متحكم بها باستخدام واجهة سطر أوامر سولانا للتحقق ودوكر. هذا يضمن أن عملية البناء محددة ومتسقة عبر الأنظمة المختلفة. بمجرد أن يكون لديك الملف التنفيذي، يمكنك نشره على شبكة سولانا. أثناء عملية البناء سيتم إنشاء PDA لـ برنامج التحقق. يحتوي هذا الـ PDA على جميع البيانات اللازمة للتحقق من البرنامج. يحتوي الـ PDA على عنوان البرنامج، ورابط git، وتجزئة الالتزام (commit hash) والوسائط المستخدمة لبناء البرنامج.
باستخدام البيانات الموجودة في الـ PDA، يمكن للجميع تشغيل أمر برنامج التحقق محليًا والتحقق مما إذا كان البرنامج قد تم بناؤه من الكود المصدري المقدم. ثم يمكن للجميع التحقق بأنفسهم بشكل كامل دون الحاجة للثقة أو يمكنهم تشغيل واجهة برمجة التطبيقات الخاصة بالتحقق التي تديرها OtterSec لتوفير نقطة وصول سهلة للمستخدمين للتحقق من التحقق. يمكنك بالفعل رؤية هذه استدعاءات واجهة برمجة التطبيقات التي يتم استخدامها في مستكشف سولانا و SolanaFM، من بين أماكن أخرى.
لماذا يجب أن أستخدم البناءات المتحقق منها؟
استخدام البناءات المتحقق منها يوفر الفوائد التالية:
-
الأمان: ضمان أن البرنامج الذي يعمل على السلسلة يطابق الكود المصدري، مما يمنع التعديلات الخبيثة.
-
الشفافية: تسمح للمستخدمين والمطورين الآخرين بالتحقق من أن البرنامج الموجود على السلسلة جدير بالثقة من خلال مقارنته مع قاعدة الكود العامة.
-
الثقة: زيادة ثقة المستخدم، حيث تُظهر البناءات المتحقق منها أن سلوك برنامجك على السلسلة متوافق مع الكود العام الخاص بك. عند بناء برامج قابلة للتحقق، فإنك تقلل من المخاطر المرتبطة بتشغيل كود غير مصرح به أو خبيث. كما يضمن ذلك امتثالك لأفضل الممارسات ويمنح باحثي الأمان طريقة سهلة للاتصال بك. كما يمكن للمحافظ وأدوات أخرى السماح بالمعاملات من برنامجك بسهولة أكبر طالما تم التحقق منه.
-
قابلية الاكتشاف: عندما توفر نسخة موثقة من برنامجك، يمكن للجميع العثور على الكود المصدري، والوثائق، وبرنامج SDK أو IDL الخاص بك، كما يمكنهم أيضًا التواصل معك بسهولة عبر GitHub في حالة وجود مشكلة.
كيف أنشئ إصدارات موثقة؟
لإنشاء إصدارات موثقة، ستحتاج إلى اتباع هذه الخطوات:
الملخص:
- قم بإيداع الكود الخاص بك في مستودع عام
- قم ببناء إصدار موثق في دوكر
- قم بنشر الإصدار الموثق
- تحقق من البرنامج المنشور مقابل واجهة برمجة التطبيقات العامة
إذا قمت بالتحقق من برنامجك الذي لم يتم بناؤه في حاوية دوكر، فمن المرجح أن يفشل لأن عمليات بناء برنامج سولانا ليست حتمية عبر الأنظمة المختلفة.
تثبيت دوكر وكارجو
قم بتثبيت الأدوات الضرورية وتأكد من تثبيت دوكر وكارجو. يوفر دوكر بيئة بناء متحكم بها لضمان الاتساق، ويستخدم كارجو لإدارة حزم Rust.
- دوكر: اتبع الخطوات على موقع دوكر لتثبيت دوكر لمنصتك. بمجرد التثبيت، تأكد من تشغيل خدمة دوكر باتباع هذا الدليل.
- كارجو: إذا لم يكن لديك كارجو مثبتًا بالفعل، يمكنك تثبيته عن طريق تشغيل الأمر التالي:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
تثبيت واجهة سطر أوامر التحقق من سولانا
واجهة سطر أوامر التحقق من سولانا هي الأداة الرئيسية المستخدمة للتحقق من الإصدارات. يتم صيانة واجهة سطر أوامر التحقق من سولانا حاليًا بواسطة Ellipsis Labs ويمكن تثبيتها باستخدام كارجو.
يمكنك تثبيتها عن طريق تشغيل:
cargo install solana-verify
إذا كنت بحاجة إلى إصدار محدد من واجهة سطر الأوامر، يمكنك تثبيت الإصدار باستخدام:
cargo install solana-verify --version $VERSION
إذا رغبت في ذلك، يمكنك تثبيت إصدار مباشرة من التزام محدد:
cargo install solana-verify --git https://github.com/Ellipsis-Labs/solana-verifiable-build --rev 13a1db2
تجهيز المشروع
للتحقق من مستودع، يجب أن يحتوي على ملف Cargo.lock
في الدليل الرئيسي للمستودع
الخاص بك. إذا كان لديك برنامج واحد فقط في المستودع الخاص بك وملف cargo.lock
في
الجذر، يمكنك الانتقال مباشرة إلى الخطوة التالية وبناء برنامجك.
إذا كان برنامجك في مجلد فرعي ولديك مساحة عمل Rust، فأنت بحاجة إلى إنشاء ملف
Cargo.toml
لمساحة العمل في الدليل الرئيسي للمستودع الخاص بك.
يمكنك استخدام هذا المثال لملف Cargo.toml
كنموذج أولي:
[workspace]members = ["program/programs/*"]resolver = "2"[profile.release]overflow-checks = truelto = "fat"codegen-units = 1[profile.release.build-override]opt-level = 3incremental = falsecodegen-units = 1
تأكد من أن برنامجك موجود في مصفوفة workspace/members
وأن ملف Cargo.toml
الخاص ببرنامجك يحتوي على اسم lib
المكون بشكل صحيح.
المهم هو
lib name
وليس اسم الحزمة!
شيء مثل هذا:
[package]name = "waffle"version = "0.1.0"edition = "2021"[lib]name = "waffle"crate-type = ["cdylib", "lib"][dependencies]solana-program = "2.1.0"
في هذا المستودع يمكنك
رؤية مثال على مساحة عمل مع برنامج في مجلد فرعي. لاحظ أيضًا أنه عندما يكون
البرنامج في مجلد فرعي، ستحتاج لاحقًا إلى إضافة هذا المجلد كـ --mount-path
إلى
أمر verify-from-repo
.
في هذا المستودع يمكنك العثور على مثال Anchor. وفي هذا المستودع يمكنك العثور على مثال Rust الأصلي.
مع وجود ملف Cargo.toml
هذا، يمكنك بعد ذلك تشغيل cargo generate-lockfile
لإنشاء ملف قفل ومتابعة بناء برنامجك.
بناء برامج قابلة للتحقق
لبناء برنامج سولانا الخاص بك بشكل قابل للتحقق، انتقل إلى الدليل الذي يحتوي على
ملف Cargo.toml
لمساحة العمل الخاصة بك وقم بتشغيل:
solana-verify build
سيقوم هذا بنسخ بيئتك إلى حاوية دوكر وبنائها بطريقة محددة.
تأكد من أنك تقوم بنشر البناء المتحقق منه فعليًا ولا تقوم بالكتابة فوقه عن طريق الخطأ باستخدام
anchor build
أوcargo build-sbf
لأن هذه على الأرجح لن تؤدي إلى نفس التجزئة وبالتالي سيفشل التحقق الخاص بك.
للمشاريع التي تحتوي على برامج متعددة، يمكنك بناء برنامج محدد باستخدام اسم المكتبة (وليس اسم الحزمة):
solana-verify build --library-name $PROGRAM_LIB_NAME
تضمن هذه العملية عمليات بناء حتمية وقد تستغرق بعض الوقت، خاصة على أنظمة معينة (مثل أجهزة M1 MacBook) لأنها تعمل داخل حاوية دوكر. للحصول على عمليات بناء أسرع، يُنصح باستخدام جهاز لينكس يعمل بهندسة x86.
بمجرد اكتمال عملية البناء، يمكنك استرداد تجزئة الملف التنفيذي باستخدام الأمر التالي:
solana-verify get-executable-hash target/deploy/$PROGRAM_LIB_NAME.so
نشر البرامج القابلة للتحقق
بمجرد بناء برنامجك والحصول على التجزئة الخاصة به، يمكنك نشره على شبكة سولانا. يُنصح باستخدام حل متعدد التوقيعات أو حوكمة مثل بروتوكول Squads للنشر الآمن، ولكن يمكنك أيضًا النشر مباشرة باستخدام:
solana program deploy -u $NETWORK_URL target/deploy/$PROGRAM_LIB_NAME.so --program-id $PROGRAM_ID --with-compute-unit-price 50000 --max-sign-attempts 100 --use-rpc
رسوم منخفضة الأولوية مناسبة حاليًا يمكنك طلبها من مزود rpc الخاص بك على سبيل المثال Quicknode.
للتحقق من أن البرنامج المنشور يطابق الملف التنفيذي المبني، قم بتشغيل:
solana-verify get-program-hash -u $NETWORK_URL $PROGRAM_ID
قد يكون لديك إصدارات مختلفة منشورة على مختلف مجموعات سولانا (أي devnet، testnet، mainnet). تأكد من استخدام عنوان URL الصحيح للشبكة لمجموعة سولانا المطلوبة التي تريد التحقق من البرنامج مقابلها. سيعمل التحقق عن بُعد فقط على الشبكة الرئيسية.
التحقق مقابل المستودعات
للتحقق من برنامج مقابل مستودعه العام، استخدم:
solana-verify verify-from-repo -u $NETWORK_URL --program-id $PROGRAM_ID https://github.com/$REPO_PATH --commit-hash $COMMIT_HASH --library-name $PROGRAM_LIB_NAME --mount-path $MOUNT_PATH
بينما تقوم بتشغيل البناء المتحقق منه في دليل برنامجك، عند تشغيل
verify-from-repo
تحتاج إلى إضافة العلامة--mount-path
. سيكون هذا المسار إلى المجلد الذي يحتوي علىCargo.toml
الذي يحتوي على اسم مكتبة برنامجك.
يقارن هذا الأمر بين هاش البرنامج على السلسلة وهاش الملف التنفيذي المبني من المصدر في هاش الالتزام المحدد.
في النهاية سيسألك الأمر إذا كنت ترغب في تحميل بيانات التحقق الخاصة بك على السلسلة. إذا فعلت ذلك، سيعرض مستكشف سولانا بيانات التحقق الخاصة ببرنامجك على الفور. حتى يتم التحقق منه بواسطة بناء عن بُعد، سيظهر كغير متحقق منه. تعرف على كيفية التحقق من برنامجك مقابل واجهة برمجة تطبيقات عامة في الخطوة التالية.
إذا كنت ترغب في تثبيت التحقق على إصدار معين، يمكنك إضافة --commit-hash
إلى
الأمر.
التحقق مقابل واجهة برمجة التطبيقات العامة
أخيرًا يمكنك أيضًا التحقق مباشرة من البرنامج مقابل أي شخص يقوم بتشغيل واجهة برمجة التطبيقات للتحقق:
solana-verify verify-from-repo --remote -um --program-id PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY https://github.com/Ellipsis-Labs/phoenix-v1
يوصى باستخدام عنوان RPC مدفوع لأنك قد تواجه حدود معدل الاستخدام للـ RPCs المجانية. لذلك بدلاً من
-um
يجب عليك استخدام--url yourRpcUrl
للحصول على تحقق أكثر موثوقية.
العلامة --remote
ترسل طلب بناء إلى واجهة برمجة تطبيقات OtterSec، مما يؤدي إلى
بناء عن بُعد لبرنامجك. بمجرد اكتمال البناء، يتحقق النظام من أن هاش برنامجك على
السلسلة يتطابق مع هاش ملف البناء الذي تم إنشاؤه من مستودعك.
الافتراضي هو واجهة برمجة تطبيقات OtterSec.
تأكد من اختيار نعم عندما يُطلب منك تحميل بيانات التحقق على السلسلة. يتم استخدام هذا بواسطة واجهة برمجة التطبيقات للتحقق من أنك قمت بتحميل بيانات التحقق.
يمكنك أيضًا تشغيل مهمة عن بُعد يدويًا باستخدام:
solana-verify remote submit-job --program-id <program-id> --uploader <address>
حيث يكون المُحمِّل هو العنوان الذي لديه صلاحية الكتابة إلى PDA. يجب أن تكون سلطة البرنامج في معظم الحالات. إذا كان برنامجك يتم التحكم فيه بواسطة توقيع متعدد، يرجى المتابعة في قسم التحقق من التوقيع المتعدد من هذا الدليل أدناه.
سيؤدي هذا إلى إرسال مهمة إلى واجهة برمجة تطبيقات OtterSec ويمكنك بعد ذلك التحقق من حالة المهمة باستخدام:
solana-verify remote get-job-status --job-id <job-id>
بمجرد اكتمال عملية التحقق بنجاح، والتي قد تستغرق بعض الوقت، ستتمكن من رؤية برنامجك كبرنامج تم التحقق منه في واجهة برمجة تطبيقات OtterSec للبرامج الفردية وفي مستكشف سولانا، SolanaFM، SolScan وفي النهاية أيضًا على موقع الويب الذي يديره المجتمع SolanaVerify.org الذي يحافظ عليه 0xDeep و واجهة برمجة تطبيقات البرامج المتحقق منها من OtterSec وأخيرًا في لوحة معلومات Dune للبرامج المتحقق منها مما يساهم في نظام بيئي أكثر صحة لسولانا.
كيفية التحقق من برنامجك عندما يتم التحكم فيه بواسطة توقيع متعدد مثل Squads
لكي يعمل التحقق عن بُعد، تحتاج إلى كتابة بيانات التحقق في PDA موقعة من قبل سلطة البرنامج. إذا كان برنامجك يتم التحكم فيه بواسطة توقيع متعدد، يمكنك تصدير معاملة كتابة PDA هذه وإرسالها من خلال بروتوكول Squads أو أي حل توقيع متعدد آخر تختاره.
1. بناء البرنامج القابل للتحقق
أولاً قم ببناء البرنامج:
solana-verify build
سيؤدي هذا إلى بناء نسخة قابلة للتحقق باستخدام حاوية دوكر باستخدام إصدار سولانا
المحدد في ملف Cargo.lock
.
2. نشر البرنامج
solana config set --url "PayedMainnetRPCAddress" // the public endpoint will be rate limited too muchsolana program deploy target/deploy/verify_squads.so
لبقية دليل التوقيع المتعدد هذا، سنستخدم معرف برنامج مثال وهو
6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD
.
3. الالتزام والتحقق مقابل المستودع
بمجرد الانتهاء من ذلك، نقوم بإرسال المشروع إلى جيثب. إليك مثالاً: https://github.com/solana-developers/verify-squads
اختياري: تحقق مما إذا كان بإمكانك التحقق محلياً أولاً (يستخدم هذا الأمر معرف
البرنامج المثال 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD
):
solana-verify verify-from-repo https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD
فقط للتأكد من صحة المعلمات الخاصة بك.
4. نقل سلطة البرنامج إلى التوقيع المتعدد
إذا لم تقم بعد بنقل سلطة برامجك إلى التوقيع المتعدد ونسخ سلطة التوقيع المتعدد. ستحتاج إليها في الخطوة التالية.
5. تصدير معاملة PDA
عندما يكون لديك سلطة البرنامج محلياً، ستتم مطالبتك بتحميل بيانات البناء على
السلسلة عند استخدام الأمر solana-verify verify-from-repo
.
بما أنك لا تستطيع القيام بذلك عند استخدام توقيع متعدد، تحتاج إلى تصدير معاملة PDA يدوياً ثم تشغيل المعاملة من خلال Squads.
solana-verify export-pda-tx https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader <your program authority> --encoding base58 --compute-unit-price 0
سيعيد لك هذا معاملة مشفرة بنظام base58. إذا كنت تريد معاملة مشفرة بنظام base64
لاستخدامها في فاحص المعاملات، يمكنك استخدام --encoding base64
.
P6vBfcPaaXb8fZoT3NBAYEcdtEj7tubA1k2gBxmFKZ3UWF5YyrmDMFTvLKALCJoUuRsPAjMckudYruCu3eeWQtuDrFbEMLxLFutnKXac974fnkMivcwUdY66VLjbxQT6ATmcy7F4hBtz1G4P1h6iBJLhb8WtrtgY3i4qq45MUEb7RjuMEfUFXKrNgPdGxkz5xvMHq3dxKRcpmEK5k2DkeW6SUQYBVe19Ga3B9GyhTX8k3CMt9JCEah13WyRnQd8GjoK6sTEvGJym6xDNvmd8yiJYSNcaYwEJsjHEUf4Yh6kAC7ki2KRvVAr3NVe1gjqK9McrwSQjtUatvydTG8Zovcr7PPUEMf3yPMgKXjZLB2QpkH63yTTYdNAnWFuv9E6b6nYRqye5XcNi436yKw5U14fXh65yK34bgYLi9328UT1huJELsJU9BRGnGUmb6GWp6c2WL5BhnzgNTSnt9TXFfEgUMzhvKzpVBxLP44hwqqBdyUhHFysCF37531PnmiESq8x1xou23xJ6FcQbc199754MkqQd7tX9CUznGzAEqHGkzn3VBoJnojsKtgYmiTYbdRsT1CU18MbYEE7WvGAvXyxxbpNzbAcc94HrnM6cqRGmwhEBroPfFghTdmzg9D
6. إرسال المعاملة من خلال Squads
انتقل إلى منشئ معاملات Squads واستورد المعاملة المشفرة بنظام base58. تأكد من أنه في المحاكاة، المعاملة تحتوي فقط على استدعاء لبرنامج التحقق من osec وبرنامج ميزانية الكمبيوتر ولا شيء آخر!
7. إرسال مهمة التحقق عن بُعد
بمجرد نجاح المعاملة إلى Squads، يمكنك إرسال المهمة عن بُعد:
solana-verify remote submit-job --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD--uploader <your program authority>
هذا كل شيء! لقد تحققت من برنامجك مقابل مستودع عام وقمت بإرسال مهمة عن بُعد إلى واجهة برمجة تطبيقات OtterSec. يجب أن تكون قادراً على رؤية ذلك في مستكشف سولانا وأماكن أخرى الآن.
8. تحديث البرنامج (اختياري)
عندما تقوم بتحديث برنامجك، ستحتاج إلى تصدير معاملة PDA جديدة وتقديمها من خلال Squads مرة أخرى.
إجراء تحديث للبرنامج:
solana-verify buildsolana program write-buffer target/deploy/verify_squads.so --with-compute-unit-price 50000 --max-sign-attempts 50
ثم قم بنقل سلطة المخزن المؤقت إلى التوقيع المتعدد أو قم بإنشاء المخزن المؤقت مباشرة بسلطة التوقيع المتعدد.
solana program set-buffer-authority Fu3k79g53ZozAj47uq1tXrFy4QbQYh7y745DDsxjtyLR --new-buffer-authority 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K
9. تصدير وتقديم معاملة PDA جديدة
لا تنس حفظ تغييراتك على GitHub. قم بتصدير معاملة ترقية PDA مرة أخرى:
solana-verify export-pda-tx https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K
قم بتقديم المعاملة من خلال Squads مرة أخرى.
يمكنك رؤية مثال على المعاملة هنا.
ثم قم بتقديم طلب بناء عن بُعد آخر:
solana-verify remote submit-job --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K
يجب أن تحصل على نتيجة مشابهة لهذه:
Verification request sent with request id: b63339d2-163e-49ac-b55d-3454c1c2b5b3Verification in progress... ⏳ [00:18:02] ✅ Process completed. (Done in 18minutes) Program 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD has been verified.✅ The provided GitHub build matches the on-chain hash. On Chain Hash:96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 ExecutableHash: 96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 Repo URL:https://github.com/Woody4618/verify-squads/tree/0fb0a2e30c15c51732c0ad5e837975a6f7bbc7edCheck the verification status at:https://verify.osec.io/status/6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD Joburl: https://verify.osec.io/job/b63339d2-163e-49ac-b55d-3454c1c2b5b3
تهانينا! لقد تحققت من برنامجك بعد ترقية التوقيع المتعدد!
التحقق من صورة دوكر
يمكنك أيضًا التحقق من برنامجك مقابل صورة دوكر عن طريق تشغيل الأمر التالي:
solana-verify verify-from-image -eexamples/hello_world/target/deploy/hello_world.so -iellipsislabs/hello_world_verifiable_build:latest -p2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn
يقوم هذا الأمر بتحميل الصورة المخزنة في
ellipsislabs/hello_world_verifiable_build:latest
، والتحقق من أن تجزئة مسار
الملف التنفيذي في الحاوية هي نفس تجزئة البرنامج على السلسلة المقدمة للأمر. نظرًا
لأنه تم بالفعل رفع البناء إلى صورة، فلا حاجة لإعادة بناء كاملة للملف التنفيذي
والتي قد تستغرق وقتًا طويلاً.
يمكن العثور على ملف Dockerfile الذي ينشئ الصورة
ellipsislabs/hello_world_verifiable_build:latest
في مستودع Ellipsis Labs
/examples/hello_world.
فيما يلي المخرجات المتوقعة:
Verifying image: "ellipsislabs/hello_world_verifiable_build:latest", on network"https://api.mainnet-beta.solana.com" against program ID2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn Executable path in container:"examples/hello_world/target/deploy/hello_world.so"Executable hash:08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Program hash:08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Executablematches on-chain program data ✅
مثال على البناء المتحقق منه
إليك مثال على التحقق من برنامج مثال بمعرف
FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv
باستخدام الكود المصدري من هذا
المستودع:
solana-verify verify-from-repo https://github.com/solana-developers/verified-program --url YOUR-RPC-URL --program-id FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv --mount-path waffle --library-name waffle --commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e
بشكل افتراضي، يأخذ الأمر verify-from-repo
آخر التزام في الفرع الرئيسي. يمكنك
أيضًا تحديد التزام معين في حالة رغبتك في مواصلة العمل على المستودع باستخدام
المعلمة commit-hash
: --commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e
أخيرًا، يمكنك أيضًا التحقق من البرنامج مباشرة مقابل واجهة برمجة تطبيقات OtterSec:
solana-verify verify-from-repo https://github.com/solana-developers/verified-program --url YOUR-RPC-URL --remote --program-id FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv --mount-path waffle --library-name waffle --commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e
يرسل الأمر --remote
طلب بناء إلى واجهة برمجة تطبيقات OtterSec، مما يؤدي إلى
بناء عن بُعد لبرنامجك. بمجرد اكتمال البناء، يتحقق النظام من أن التجزئة على
السلسلة لبرنامجك تتطابق مع تجزئة ناتج البناء المُنشأ من مستودعك.
البرامج الشهيرة التي تم التحقق منها بالفعل
فينيكس (Phoenix)
solana-verify verify-from-repo -um --program-id PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY https://github.com/Ellipsis-Labs/phoenix-v1
الناتج النهائي:
Executable Program Hash from repo: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9On-chain Program Hash: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9Program hash matches ✅
سكوادز الإصدار الثالث (Squads V3)
solana-verify verify-from-repo https://github.com/Squads-Protocol/squads-mpl --commit-hash c95b7673d616c377a349ca424261872dfcf8b19d --program-id SMPLecH534NA9acpos4G6x7uf3LWbCAwZQE9e8ZekMu -um --library-name squads_mpl --bpf
لاحظ أننا احتجنا إلى تحديد
library-name
لأن مستودع Squads يتضمن برامج متعددة. نستخدم العلامة--bpf
لأنsquads_mpl
تم التحقق منه مسبقًا باستخدام Anchor.
الناتج النهائي:
Executable Program Hash from repo: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205cOn-chain Program Hash: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205cProgram hash matches ✅
دريفت الإصدار الثاني (Drift V2)
solana-verify verify-from-repo -um --program-id dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH https://github.com/drift-labs/protocol-v2 --commit-hash 110d3ff4f8ba07c178d69f9bfc7b30194fac56d6 --library-name drift
الناتج النهائي:
Executable Program Hash from repo: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828On-chain Program Hash: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828Program hash matches ✅
مارجنفاي الإصدار الثاني (Marginfi V2)
solana-verify verify-from-repo -um --program-id MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA https://github.com/mrgnlabs/marginfi-v2 --commit-hash d33e649e415c354cc2a1e3c49131725552d69ba0 --library-name marginfi -- --features mainnet-beta
الناتج النهائي:
Executable Program Hash from repo: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5On-chain Program Hash: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5Program hash matches ✅
الخلاصة
استخدام عمليات البناء المتحقق منها على سولانا يضمن سلامة وموثوقية برامجك على الشبكة ويسمح للمطورين بالعثور على مجموعات تطوير البرمجيات (SDKs) الخاصة بك مباشرة من مستكشف سولانا. من خلال الاستفادة من أدوات مثل واجهة سطر أوامر التحقق من سولانا وDocker، يمكنك الحفاظ على عمليات بناء قابلة للتحقق وآمنة تتوافق مع شفرة المصدر الخاصة بك. احرص دائمًا على اتخاذ الاحتياطات اللازمة لاستخدام بيئات متسقة، والنظر في حلول الحوكمة للترقيات والنشر الآمن.
الأمان + إخلاء المسؤولية
في حين أن عمليات البناء المتحقق منها هي أداة قوية لضمان سلامة برامج سولانا الخاصة بك، إلا أنها ليست خالية تمامًا من الثقة في الإعداد الافتراضي. يتم بناء صور دوكر واستضافتها بواسطة مؤسسة سولانا.
كن على علم بأنك تقوم ببناء مشروعك في صورة دوكر تم تنزيلها وأن الإعداد بأكمله يتم نسخه إلى صورة دوكر تلك للبناء بما في ذلك المعلومات الحساسة المحتملة.
إذا كنت ترغب في الحصول على إعداد خالٍ تمامًا من الثقة، يمكنك بناء صور دوكر بنفسك واستضافتها على البنية التحتية الخاصة بك. بهذه الطريقة يمكنك التأكد من أن صور دوكر لم يتم العبث بها. يمكنك العثور على البرامج النصية لإنشاء صور دوكر الخاصة بك في مستودع البناء القابل للتحقق ويمكنك استنساخه وتشغيل إجراءات GitHub بنفسك أو التحقق من أنها صحيحة.
علاوة على ذلك، بالنسبة للتحقق عن بُعد، فإنك تثق في واجهة برمجة تطبيقات OtterSec و مستكشف سولانا إلى درجة معينة.
قد تعرض واجهة برمجة التطبيقات أو مستكشف سولانا معلومات غير صحيحة في حالة اختراقها.
إذا كنت ترغب في الحصول على إعداد خالٍ تمامًا من الثقة، يمكنك تشغيل
واجهة برمجة التطبيقات للتحقق
بنفسك أو تشغيل التحقق من البرنامج محليًا بنفسك باستخدام الأمر verify-from-repo
باستخدام بيانات التحقق على السلسلة المحفوظة في
PDA
المشتقة من سلطة نشر البرامج و
برنامج التحقق.
يتم نشر برنامج التحقق بواسطة فريق OtterSec وهو غير مجمد بعد لذا يمكن ترقيته في أي وقت.
مؤسسة سولانا وفريق OtterSec وفريق Ellipsis Labs ليسوا مسؤولين عن أي خسائر أو أضرار قد تحدث من استخدام خط أنابيب البنيات المتحقق منها.
ملف Security.txt لبرامج سولانا
بالإضافة إلى البنيات المتحقق منها، يمكنك أيضًا إضافة ملف security.txt
إلى
برنامجك. في المستقبل، بمجرد تنفيذه، سيحتفظ security.txt
بمفتاح المتحقق العام
للوصول السهل إلى بيانات التحقق المخزنة في PDA الخاص بالتحقق. يتم اشتقاق PDA الذي
يحتوي على جميع المعلومات اللازمة لبناء والتحقق من البرنامج من عنوان البرامج و
pubkey الخاص بالمتحقق. بشكل افتراضي، هذا هو نفس pubkey الذي بنى ونشر البرنامج.
ولكن يمكن أن يكون أيضًا pubkey آخر يمكن تحديده في security.txt
.
تتيح ميزة security.txt
للمطورين تضمين معلومات الاتصال والأمان مباشرة داخل عقود
سولانا الذكية. مستوحاة من securitytxt.org، يوفر هذا
النهج طريقة موحدة للباحثين في مجال الأمان للتواصل مع مشرفي المشروع، حتى لو كانوا
يعرفون فقط عنوان العقد.
لماذا تستخدم security.txt؟
بالنسبة للعديد من المشاريع، خاصة الصغيرة أو الخاصة منها، يمكن أن يكون تحديد
المطورين من مجرد عنوان العقد صعبًا ويستغرق وقتًا طويلاً. تضمين ملف
security.txt
داخل البرنامج يضمن أن باحثي الأمان يمكنهم بسهولة الاتصال بالأشخاص
المناسبين، مما يمنع محتملاً الاستغلال ويضمن تقارير الأخطاء في الوقت المناسب.
كيفية تنفيذ security.txt
لإضافة security.txt
إلى برنامج سولانا الخاص بك، قم بتضمين الخطوات التالية:
أضف التبعية solana-security-txt
إلى ملف Cargo.toml
الخاص بك:
[dependencies]solana-security-txt = "1.1.1"
استخدم وحدة الماكرو security_txt!
في عقدك لتحديد معلومات الأمان الخاصة بك.
يمكنك تضمين تفاصيل الاتصال، وروابط المشروع، وحتى سياسة الأمان. إليك مثال:
#[cfg(not(feature = "no-entrypoint"))]use {default_env::default_env, solana_security_txt::security_txt};#[cfg(not(feature = "no-entrypoint"))]security_txt! {name: "MyProject",project_url: "https://myproject.com",contacts: "email:security@myproject.com,discord:security#1234",policy: "https://myproject.com/security-policy",// Optional Fieldspreferred_languages: "en,de",source_code: "https://github.com/solana-developers/solana-game-preset",source_revision: "5vJwnLeyjV8uNJSp1zn7VLW8GwiQbcsQbGaVSwRmkE4r",source_release: "",encryption: "",auditors: "Verifier pubkey: 5vJwnLeyjV8uNJSp1zn7VLW8GwiQbcsQbGaVSwRmkE4r",acknowledgements: "Thank you to our bug bounty hunters!"}
بمجرد تضمين معلومات security.txt
في برنامجك، يمكن الاستعلام عنها بسهولة عبر
أدوات مثل مستكشف سولانا، مما يضمن أن تفاصيل الاتصال والأمان الخاصة بك متاحة لأي
شخص يرغب في الإبلاغ عن مشكلات محتملة.
أفضل الممارسات
-
استخدام الروابط: بالنسبة للمعلومات التي من المحتمل أن تتغير (مثل تفاصيل الاتصال)، يُوصى بالربط إلى صفحة ويب بدلاً من تضمينها مباشرة في العقد. هذا يتجنب الحاجة إلى ترقيات متكررة للبرنامج.
-
التحقق: قبل النشر، تحقق من التنسيق والمحتوى باستخدام أداة
query-security-txt
، التي يمكنها التحقق من صحة البرامج على السلسلة والملفات الثنائية المحلية:
query-security-txt target/bpfel-unknown-unknown/release/my_contract.so
من خلال تضمين معلومات الاتصال الأمنية مباشرة في عقدك، تجعل من السهل على الباحثين الوصول إليك، مما يعزز الأمان والتواصل بشكل أفضل داخل نظام سولانا البيئي.
هذا مثال على كيفية ظهور security.txt في مستكشف سولانا
يتم صيانة مشروع security.txt
بواسطة
Neodyme Labs
Is this page helpful?