وثائق سولاناالبنية التحتية كرمزإضافة SVM

إجراءات SVM

هذه الإجراءات متاحة عند استخدام إضافة SVM لبناء المعاملات وتوقيعها وبثّها.

deploy_program

svm::deploy_program ينشر برنامج سولانا على الشبكة المتوافقة مع SVM المحددة.

المدخلات

الاسممطلوبالنوعالوصف
descriptionاختياريstringوصف لإجراء النشر
programمطلوبobjectمكتبات برنامج سولانا المراد نشرها
payerاختياريstringمرجع إلى موقّع لدفع تكاليف النشر
authorityمطلوبstringمرجع إلى موقّع لصلاحية البرنامج
commitment_levelاختياريstringمستوى الالتزام ('processed'، 'confirmed'، 'finalized')
auto_extendاختياريboolما إذا كان سيتم تمديد program account تلقائيًا (الافتراضي: true)

المخرجات

الاسمالنوعالوصف
signaturesobjectتوقيعات المعاملة المحسوبة
program_idstringمعرّف البرنامج المنشور
program_idlstringIDL البرنامج
action "deploy" "svm::deploy_program" {
description = "Deploy hello world program"
program = svm::get_program_from_anchor_project("hello_world")
authority = signer.authority
payer = signer.payer # Optional, defaults to authority
}

process_instructions

يقوم إجراء svm::process_instructions بترميز التعليمات وإضافتها إلى معاملة، ثم توقيع المعاملة وبثّها.

المدخلات

الاسممطلوبالنوعالوصف
descriptionاختياريstringوصف للمعاملة
instructionمطلوبmapالتعليمات المراد إضافتها إلى المعاملة
signersمطلوبarray[string]مراجع إلى مكوّنات الموقّع
commitment_levelاختياريstringمستوى الالتزام
rpc_api_urlمطلوبstringعنوان URL لطلبات API

المخرجات

الاسمالنوعالوصف
signaturestringالتوقيع المحسوب للمعاملة
action "program_call" "svm::process_instructions" {
description = "Invoke instructions"
instruction {
program_idl = variable.program.idl
instruction_name = "initialize"
instruction_args = [1]
payer {
public_key = signer.payer.public_key
}
}
signers = [signer.caller]
}

send_sol

يُشفِّر الإجراء svm::send_sol معاملةً ترسل SOL، ثم يوقِّعها ويبثُّها إلى الشبكة.

المدخلات

الاسممطلوبالنوعالوصف
descriptionاختياريstringوصف للمعاملة
amountمطلوبintegerالمبلغ المراد إرساله، بوحدة lamport
recipientمطلوبstringعنوان SVM للمستلم
signerمطلوبstringمرجع إلى بنية موقِّع
commitment_levelاختياريstringمستوى الالتزام
rpc_api_urlمطلوبstringرابط URL لطلبات API

المخرجات

الاسمالنوعالوصف
signaturestringالتوقيع المحسوب للمعاملة
action "send_sol" "svm::send_sol" {
description = "Send some SOL"
amount = svm::sol_to_lamports(1)
signer = signer.caller
recipient = "zbBjhHwuqyKMmz8ber5oUtJJ3ZV4B6ePmANfGyKzVGV"
}

send_token

يُشفِّر الإجراء svm::send_token معاملةً ترسل الرمز المميز المحدد، ثم يوقِّعها ويبثُّها إلى الشبكة.

المدخلات

الاسممطلوبالنوعالوصف
descriptionاختياريstringوصف للمعاملة
amountمطلوبintegerكمية الرموز المميزة للإرسال، بالوحدة الأساسية
tokenمطلوبstringعنوان mint account للرمز المميز
recipientمطلوبstringعنوان SVM للمستلم
authorityاختياريstringpubkey الخاص بحساب الصلاحية
fund_recipientاختياريboolإنشاء وتمويل token account الخاص بالمستلم عند الحاجة
signersمطلوبarray[string]مراجع إلى بنى الموقِّعين

المخرجات

الاسمالنوعالوصف
signaturestringالتوقيع المحسوب للمعاملة
recipient_token_addresspubkeyعنوان token account الخاص بالمستلم
source_token_addresspubkeyعنوان token account المصدر
token_mint_addresspubkeyعنوان mint الخاص بالرمز
action "send_sol" "svm::send_token" {
description = "Send some tokens"
amount = 1000000
signers = [signer.caller]
recipient = "zbBjhHwuqyKMmz8ber5oUtJJ3ZV4B6ePmANfGyKzVGV"
token = "3bv3j4GvMPjvvBX9QdoX27pVoWhDSXpwKZipFF1QiVr6"
fund_recipient = true
}

setup_surfnet

يمكن استخدام svm::setup_surfnet لتهيئة surfnet.

العمليات التالية مدعومة:

  • set_account - تعيين الـ lamports والمالك والبيانات وحقول قابلية التنفيذ لحساب ما
  • set_token_account - تعيين المبلغ والمفوَّض والمبلغ المفوَّض وصلاحية الإغلاق لـ token account
  • clone_program_account - نسخ program account من معرّف برنامج مصدر إلى معرّف برنامج وجهة
  • set_program_authority - تعيين صلاحية برنامج ما
  • deploy_program - نشر برنامج مباشرةً على الـ surfnet (عبر الكتابة المباشرة في الحساب، لا عبر المعاملات)
  • reset_account - إعادة تعيين حساب وحذفه من الذاكرة المؤقتة المحلية لإعادة جلبه من المصدر الأصلي
  • stream_account - بث بيانات الحساب من الشبكة الرئيسية بحيث تتطابق البيانات المحلية دائمًا مع الشبكة الرئيسية

المدخلات

الاسمالمطلوبالنوعالوصف
descriptionاختياريstringوصف للإعداد
rpc_api_urlمطلوبstringعنوان URL لطلبات API

set_account

يُعيّن بيانات الحساب مباشرةً على الـ surfnet.

الاسمالمطلوبالنوعالوصف
public_keyمطلوبstringالمفتاح العام للحساب المراد تعيينه
account_pathاختياريstringالمسار إلى ملف JSON يحتوي على بيانات الحساب المراد تعيينها. في حال توفيره، يتم تجاهل الحقول الأخرى
lamportsاختياريintegerكمية الـ lamports التي يجب تعيينها للحساب
dataاختياريbytesالبيانات المراد تعيينها في الحساب
ownerاختياريstringالمالك المراد تعيينه للحساب
executableاختياريboolحالة قابلية التنفيذ المراد تعيينها للحساب
rent_epochاختياريintegerالـ epoch الذي سيكون فيه الحساب معفيًا من الإيجار

يجب توفير واحد على الأقل من lamports أو data أو owner أو executable أو rent_epoch (ما لم تكن تستخدم account_path).

set_token_account

يضبط بيانات token account على الـ surfnet. يتم اشتقاق associated token account تلقائيًا من المفتاح العام للمالك وعملة token mint.

الاسممطلوبالنوعالوصف
public_keyمطلوبstringالمفتاح العام لحساب مالك الرمز المراد تحديثه
tokenمطلوبstringرمز التوكن (مثل: "usdc"، "bonk") أو المفتاح العام لـ token mint
token_programاختياريstringمعرّف Token Program. القيم الصالحة هي token2020 أو token2022 أو مفتاح عام (الافتراضي: token2020)
amountاختياريintegerكمية الرموز المراد ضبطها
delegateاختياريstringالمفتاح العام للمفوَّض المراد ضبطه، أو null للمسح
stateاختياريstringحالة token account. القيم الصالحة هي initialized أو frozen أو uninitialized
delegated_amountاختياريintegerكمية الرموز المراد تفويضها
close_authorityاختياريstringالمفتاح العام لسلطة الإغلاق المراد ضبطها، أو null للمسح

يجب توفير واحد على الأقل من amount أو delegate أو state أو delegated_amount أو close_authority.

clone_program_account

يستنسخ program account من معرّف برنامج إلى آخر على الـ surfnet.

الاسممطلوبالنوعالوصف
source_program_idمطلوبstringالمفتاح العام للبرنامج المراد استنساخه
destination_program_idمطلوبstringالمفتاح العام الوجهة للبرنامج

set_program_authority

يضبط أو يزيل صلاحية الترقية لبرنامج على surfnet.

الاسممطلوبالنوعالوصف
program_idمطلوبstringpubkey الخاص بالبرنامج المراد تعيين الصلاحية له
authorityاختياريstringالصلاحية الجديدة للبرنامج. إذا لم يتم توفيرها، سيتم تعيين صلاحية البرنامج إلى None (مما يجعله غير قابل للتغيير)

deploy_program

ينشر برنامجًا مباشرةً على surfnet عبر كتابة بيانات الحساب (وليس عبر المعاملات).

الاسممطلوبالنوعالوصف
program_idمطلوبstringpubkey الخاص بالبرنامج الجاري نشره
binary_pathمطلوبstringموقع ملف .so الخاص بالبرنامج (مثال: ./target/deploy/my_program.so)
authorityاختياريstringpubkey الخاص بالجهة المخوّلة على البرنامج بعد نشره. إذا لم يتم توفيره، لن يكون للبرنامج أي صلاحية
idl_pathاختياريstringموقع ملف IDL الخاص بالبرنامج (مثال: ./target/idl/my_program.json)

reset_account

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

الاسممطلوبالنوعالوصف
public_keyمطلوبstringpubkey الخاص بالحساب المراد إعادة تعيينه
include_owned_accountsاختياريboolما إذا كان سيتم حذف جميع الحسابات المملوكة لهذا الحساب بشكل متكرر. القيمة الافتراضية هي false

stream_account

يقوم ببث بيانات الحساب من عنوان RPC للشبكة الرئيسية إلى surfnet، مع إبقاء بيانات الحساب المحلية متزامنة مع الشبكة الرئيسية.

الاسممطلوبالنوعالوصف
public_keyمطلوبstringpubkey الخاص بالحساب المراد بثه
include_owned_accountsاختياريboolما إذا كان سيتم بث جميع الحسابات المملوكة لهذا الحساب بشكل متكرر. القيمة الافتراضية هي false
action "setup" "svm::setup_surfnet" {
// Set account balance
set_account {
public_key = signer.caller.public_key
lamports = 999999999
}
// Set token balance
set_token_account {
public_key = signer.caller.public_key
token = "usdc"
amount = 1000000
}
// Clone a program
clone_program_account {
source_program_id = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
destination_program_id = variable.my_program_id
}
// Set program authority
set_program_authority {
program_id = variable.my_program_id
authority = signer.caller.public_key
}
// Deploy a program directly
deploy_program {
program_id = variable.my_program_id
binary_path = "./target/deploy/my_program.so"
idl_path = "./target/idl/my_program.json"
}
// Reset an account to re-fetch from upstream
reset_account {
public_key = variable.some_pubkey
}
// Stream account data from mainnet
stream_account {
public_key = variable.some_pubkey
include_owned_accounts = true
}
}

Is this page helpful?