وثائق سولاناتطوير البرامج

التحقق من البرامج

يهدف هذا الدليل إلى أن يكون مرجعًا للمطورين الذين يرغبون في تنفيذ عمليات البناء المتحقق منها لبرامجهم على سولانا. سنغطي ماهية البناءات المتحقق منها، وكيفية استخدامها، والاعتبارات الخاصة، وأفضل الممارسات لضمان أصالة برنامجك على السلسلة.

ما هي البناءات المتحقق منها؟

تضمن البناءات المتحقق منها أن البرنامج القابل للتنفيذ الذي تنشره على شبكة سولانا يتطابق مع كود المصدر في مستودعك. من خلال القيام بذلك، يمكن للمطورين والمستخدمين أن يثقوا بأن البرنامج الذي يعمل على السلسلة يتوافق تمامًا مع قاعدة الكود العامة، مما يعزز الشفافية والأمان.

تتضمن عملية التحقق مقارنة تجزئة البرنامج على السلسلة مع تجزئة البرنامج المبني محليًا من كود المصدر. هذا يضمن عدم وجود تناقضات بين النسختين.

على الرغم من أنه لا ينبغي اعتبار البناء المتحقق منه أكثر أمانًا من البناء غير المتحقق منه، فإن البناء يمكّن المطورين من التحقق ذاتيًا من أن كود المصدر يتطابق مع ما تم نشره على السلسلة. باستخدام كود المصدر، يمكن للمطور بعد ذلك التحقق مما ينفذه الكود عند إرسال معاملة.

تم تصميم خط أنابيب البناءات المتحقق منها والحفاظ عليه بواسطة 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 هذا كإعداد مسبق:

Cargo.toml
[workspace]
members = ["program/programs/*"]
resolver = "2"
[profile.release]
overflow-checks = true
lto = "fat"
codegen-units = 1
[profile.release.build-override]
opt-level = 3
incremental = false
codegen-units = 1

تأكد من أن برنامجك موجود في مصفوفة workspace/members وأن Cargo.toml الخاص ببرنامجك يحتوي على اسم lib الصحيح.

المهم هو lib name وليس اسم الحزمة!

شيء مثل هذا:

waffle/Cargo.toml
[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

سيؤدي هذا إلى إنشاء بناء قابل للتحقق باستخدام حاوية docker باستخدام إصدار سولانا المحدد في ملف Cargo.lock.

2. نشر البرنامج

solana config set --url "PayedMainnetRPCAddress" // the public endpoint will be rate limited too much
solana program deploy target/deploy/verify_squads.so

لبقية دليل multisig هذا، سنستخدم معرف برنامج مثال 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 build
solana 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-3454c1c2b5b3
Verification in progress... ⏳ [00:18:02] ✅ Process completed. (Done in 18
minutes) Program 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD has been verified.
The provided GitHub build matches the on-chain hash. On Chain Hash:
96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 Executable
Hash: 96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 Repo URL:
https://github.com/Woody4618/verify-squads/tree/0fb0a2e30c15c51732c0ad5e837975a6f7bbc7ed
Check the verification status at:
https://verify.osec.io/status/6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD Job
url: https://verify.osec.io/job/b63339d2-163e-49ac-b55d-3454c1c2b5b3

تهانينا! لقد تحققت من برنامجك بعد ترقية التوقيع المتعدد!

التحقق من صورة دوكر

يمكنك أيضًا التحقق من برنامجك مقابل صورة دوكر عن طريق تشغيل الأمر التالي:

solana-verify verify-from-image -e
examples/hello_world/target/deploy/hello_world.so -i
ellipsislabs/hello_world_verifiable_build:latest -p
2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn

يقوم هذا الأمر بتحميل الصورة المخزنة في 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.solana.com" against program ID
2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn Executable path in container:
"examples/hello_world/target/deploy/hello_world.so"
Executable hash:
08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Program hash:
08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Executable
matches 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 على الفرع الرئيسي. يمكنك أيضًا تحديد commit معين في حال أردت الاستمرار في العمل على المستودع باستخدام المعامل 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: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9
On-chain Program Hash: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9
Program 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: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205c
On-chain Program Hash: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205c
Program 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: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828
On-chain Program Hash: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828
Program 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: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5
On-chain Program Hash: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5
Program hash matches ✅

الخلاصة

استخدام عمليات البناء المتحقق منها على سولانا يضمن سلامة وموثوقية برامجك على الشبكة ويسمح للمطورين بالعثور على مجموعات تطوير البرمجيات (SDKs) الخاصة بك مباشرة من مستكشف سولانا. من خلال الاستفادة من أدوات مثل واجهة سطر أوامر التحقق من سولانا وDocker، يمكنك الحفاظ على عمليات بناء قابلة للتحقق وآمنة تتوافق مع شفرة المصدر الخاصة بك. احرص دائمًا على اتخاذ الاحتياطات اللازمة لاستخدام بيئات متسقة، والنظر في حلول الحوكمة للترقيات والنشر الآمن.

الأمان + إخلاء المسؤولية

في حين أن عمليات البناء المتحقق منها هي أداة قوية لضمان سلامة برامج سولانا الخاصة بك، إلا أنها ليست خالية تمامًا من الثقة في الإعداد الافتراضي. يتم بناء صور دوكر واستضافتها بواسطة مؤسسة سولانا.

كن على علم بأنك تقوم ببناء مشروعك في صورة دوكر تم تنزيلها وأن الإعداد بأكمله يتم نسخه إلى صورة دوكر تلك للبناء بما في ذلك المعلومات الحساسة المحتملة.

إذا كنت ترغب في الحصول على إعداد خالٍ تمامًا من الثقة، يمكنك بناء صور دوكر بنفسك واستضافتها على البنية التحتية الخاصة بك. بهذه الطريقة يمكنك التأكد من أن صور دوكر لم يتم العبث بها. يمكنك العثور على البرامج النصية لإنشاء صور دوكر الخاصة بك في مستودع البناء القابل للتحقق ويمكنك استنساخه وتشغيل إجراءات GitHub بنفسك أو التحقق من أنها صحيحة.

علاوة على ذلك، بالنسبة للتحقق عن بُعد، فإنك تثق في واجهة برمجة تطبيقات OtterSec و مستكشف سولانا إلى درجة معينة.

قد تعرض واجهة برمجة التطبيقات أو مستكشف سولانا معلومات غير صحيحة في حالة اختراقها.

إذا كنت تريد إعدادًا لا يتطلب الثقة بشكل كامل، يمكنك تشغيل واجهة برمجة التطبيقات للتحقق بنفسك أو تشغيل التحقق من البرنامج محليًا بنفسك باستخدام أمر verify-from-repo باستخدام بيانات التحقق الموجودة على السلسلة والمحفوظة في PDA المشتق من صلاحية نشر البرنامج و برنامج التحقق.

يتم نشر برنامج التحقق بواسطة فريق OtterSec وهو غير مجمد بعد لذا يمكن ترقيته في أي وقت.

مؤسسة سولانا وفريق OtterSec وفريق Ellipsis Labs ليسوا مسؤولين عن أي خسائر أو أضرار قد تحدث من استخدام خط أنابيب البنيات المتحقق منها.

ملف Security.txt لبرامج سولانا

بالإضافة إلى البناءات المتحقق منها، يمكنك أيضًا إضافة ملف security.txt إلى برنامجك. في المستقبل، بمجرد التنفيذ، سيحتوي security.txt على المفتاح العام للمتحقق لسهولة الوصول إلى بيانات التحقق المخزنة في PDA الخاص بالتحقق. يتم اشتقاق الـ PDA الذي يحتوي على جميع المعلومات اللازمة لبناء والتحقق من البرنامج من عنوان البرنامج والمفتاح العام للمتحقق. بشكل افتراضي، هذا هو نفس المفتاح العام الذي قام ببناء ونشر البرنامج. لكن يمكن أن يكون أيضًا مفتاحًا عامًا آخر يمكن تحديده في security.txt.

تتيح ميزة security.txt للمطورين تضمين معلومات الاتصال والأمان مباشرة داخل عقودهم الذكية على سولانا. مستوحاة من securitytxt.org، توفر هذه الطريقة وسيلة موحدة لباحثي الأمان للتواصل مع مشرفي المشروع، حتى لو كانوا يعرفون فقط عنوان العقد.

لماذا تستخدم security.txt؟

بالنسبة للعديد من المشاريع، خاصة الصغيرة أو الخاصة، قد يكون تحديد المطورين من عنوان العقد فقط أمرًا صعبًا ويستغرق وقتًا طويلاً. يضمن تضمين ملف security.txt داخل البرنامج أن يتمكن باحثو الأمن من التواصل بسهولة مع الأشخاص المناسبين، مما قد يمنع الثغرات الأمنية ويضمن الإبلاغ عن الأخطاء في الوقت المناسب.

كيفية تنفيذ security.txt

لإضافة security.txt إلى برنامج سولانا الخاص بك، اتبع الخطوات التالية:

أضف تبعية solana-security-txt إلى Cargo.toml الخاص بك:

Cargo.toml
[dependencies]
solana-security-txt = "1.1.1"

استخدم ماكرو security_txt! في عقدك لتحديد معلومات الأمان الخاصة بك. يمكنك تضمين تفاصيل الاتصال وعناوين URL للمشروع وحتى سياسة الأمان. إليك مثال:

#[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 Fields
preferred_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 في برنامجك، يمكن الاستعلام عنها بسهولة عبر أدوات مثل Solana Explorer، مما يضمن توفر تفاصيل الاتصال والأمان الخاصة بك لأي شخص يتطلع إلى الإبلاغ عن مشكلات محتملة.

أفضل الممارسات

  • استخدام الروابط: بالنسبة للمعلومات التي من المحتمل أن تتغير (مثل تفاصيل الاتصال)، يُوصى بالربط إلى صفحة ويب بدلاً من تضمينها مباشرة في العقد. هذا يتجنب الحاجة إلى ترقيات متكررة للبرنامج.

  • التحقق: قبل النشر، تحقق من التنسيق والمحتوى باستخدام أداة query-security-txt، والتي يمكنها التحقق من صحة كل من البرامج الموجودة على السلسلة والملفات الثنائية المحلية:

query-security-txt target/bpfel-unknown-unknown/release/my_contract.so

من خلال تضمين معلومات الاتصال الأمنية مباشرة في عقدك، تجعل من السهل على الباحثين الوصول إليك، مما يعزز الأمان والتواصل بشكل أفضل داخل نظام سولانا البيئي.

هذا مثال على كيفية ظهور security.txt في مستكشف سولانا

يتم صيانة مشروع security.txt بواسطة Neodyme Labs

Is this page helpful?

جدول المحتويات

ما هي البناءات المتحقق منها؟كيف يعمل ذلك؟لماذا يجب أن أستخدم البناءات المتحقق منها؟كيف أنشئ إصدارات موثقة؟تثبيت دوكر وكارجوتثبيت واجهة سطر أوامر التحقق من سولاناتجهيز المشروعبناء برامج قابلة للتحققنشر البرامج القابلة للتحققالتحقق مقابل المستودعاتالتحقق مقابل واجهة برمجة التطبيقات العامةكيفية التحقق من برنامجك عندما يتم التحكم فيه بواسطة توقيع متعدد مثل Squads1. بناء البرنامج القابل للتحقق2. نشر البرنامج3. الالتزام والتحقق مقابل المستودع4. نقل سلطة البرنامج إلى التوقيع المتعدد5. تصدير معاملة PDA6. إرسال المعاملة من خلال Squads7. إرسال مهمة التحقق عن بُعد8. تحديث البرنامج (اختياري)9. تصدير وتقديم معاملة PDA جديدةالتحقق من صورة دوكرمثال على البناء المتحقق منهالبرامج الشهيرة التي تم التحقق منها بالفعلفينيكس (Phoenix)سكوادز الإصدار الثالث (Squads V3)دريفت الإصدار الثاني (Drift V2)مارجنفاي الإصدار الثاني (Marginfi V2)الخلاصةالأمان + إخلاء المسؤوليةملف Security.txt لبرامج سولانالماذا تستخدم security.txt؟كيفية تنفيذ security.txtأفضل الممارسات
تعديل الصفحة

تدار بواسطة

© 2026 مؤسسة سولانا.
جميع الحقوق محفوظة.