Документація SolanaІнфраструктура як кодSVM Addon

SVM Дії

Ці дії доступні при використанні SVM-аддона для побудови, підписання та трансляції транзакцій.

deploy_program

svm::deploy_program розгортає програму Solana у вказаній SVM-сумісній мережі.

Вхідні дані

НазваОбов'язковоТипОпис
descriptionнеобов'язковоstringОпис дії розгортання
programобов'язковоobjectАртефакти програми Solana для розгортання
payerнеобов'язковоstringПосилання на підписанта для оплати витрат на розгортання
authorityобов'язковоstringПосилання на підписанта для авторитету програми
commitment_levelнеобов'язковоstringРівень підтвердження ('processed', 'confirmed', 'finalized')
auto_extendнеобов'язковоboolЧи автоматично розширювати program account (за замовчуванням: true)

Вихідні дані

НазваТипОпис
signaturesobjectОбчислені підписи транзакції
program_idstringID програми розгорнутої програми
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обов'язковоstringURL для 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Сума для надсилання в lamports
recipientобов'язковоstringSVM-адреса отримувача
signerобов'язковоstringПосилання на конструкцію підписанта
commitment_levelнеобов'язковоstringРівень підтвердження
rpc_api_urlобов'язковоstringURL для 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обов'язковоstringSVM-адреса отримувача
authorityнеобов'язковоstringpubkey облікового запису авторитету
fund_recipientнеобов'язковоboolСтворити та поповнити token account отримувача за потреби
signersобов'язковоarray[string]Посилання на конструкції підписантів

Виводи

НазваТипОпис
signaturestringОбчислений підпис транзакції
recipient_token_addresspubkeyАдреса associated token account отримувача
source_token_addresspubkeyАдреса вихідного token account
token_mint_addresspubkeyАдреса мінту токена
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 — Скинути обліковий запис, видаливши його з локального кешу для повторного отримання з upstream
  • stream_account — Транслювати дані облікового запису з mainnet, щоб локальні дані завжди збігалися з mainnet

Вхідні дані

НазваОбов'язковістьТипОпис
descriptionнеобов'язковийstringОпис налаштування
rpc_api_urlобов'язковийstringURL для API-запитів

set_account

Встановлює дані облікового запису безпосередньо на surfnet.

НазваОбов'язковістьТипОпис
public_keyобов'язковийstringПублічний ключ облікового запису, який потрібно встановити
account_pathнеобов'язковийstringШлях до JSON-файлу з даними облікового запису для встановлення. Якщо вказано, інші поля ігноруються
lamportsнеобов'язковийintegerКількість lamports, яку повинен мати обліковий запис
dataнеобов'язковийbytesДані для запису в обліковий запис
ownerнеобов'язковийstringВласник, якого потрібно встановити для облікового запису
executableнеобов'язковийboolСтан виконуваності для встановлення облікового запису
rent_epochнеобов'язковийintegerepoch, після якого обліковий запис буде звільнений від орендної плати

Необхідно вказати принаймні одне з: lamports, data, owner, executable або rent_epoch (якщо не використовується account_path).

set_token_account

Встановлює дані token account на surfnet. associated token account автоматично визначається з відкритого ключа власника та токен-мінту.

NameRequiredTypeDescription
public_keyrequiredstringВідкритий ключ облікового запису власника токена для оновлення
tokenrequiredstringСимвол токена (наприклад, "usdc", "bonk") або відкритий ключ токен-мінту
token_programoptionalstringІдентифікатор Token Program. Допустимі значення: token2020, token2022 або відкритий ключ (за замовчуванням: token2020)
amountoptionalintegerКількість токенів для встановлення
delegateoptionalstringВідкритий ключ делегата для встановлення або null для очищення
stateoptionalstringСтан token account. Допустимі значення: initialized, frozen або uninitialized
delegated_amountoptionalintegerКількість токенів для делегування
close_authorityoptionalstringВідкритий ключ close authority для встановлення або null для очищення

Необхідно вказати принаймні одне з: amount, delegate, state, delegated_amount або close_authority.

clone_program_account

Клонує program account з одного ідентифікатора програми в інший на surfnet.

NameRequiredTypeDescription
source_program_idrequiredstringВідкритий ключ програми для клонування
destination_program_idrequiredstringЦільовий відкритий ключ програми

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 URL основної мережі до 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?