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

SVM Actions

Эти действия доступны при использовании дополнения SVM для построения, подписания и отправки транзакций.

deploy_program

svm::deploy_program развёртывает программу Solana в указанной SVM-совместимой сети.

Входные параметры

NameRequiredTypeDescription
descriptionoptionalstringОписание действия по развёртыванию
programrequiredobjectАртефакты программы Solana для развёртывания
payeroptionalstringСсылка на подписанта для оплаты затрат на развёртывание
authorityrequiredstringСсылка на подписанта для авторизации программы
commitment_leveloptionalstringУровень подтверждения ('processed', 'confirmed', 'finalized')
auto_extendoptionalboolАвтоматически ли расширять program account (по умолчанию: true)

Выходные параметры

NameTypeDescription
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 кодирует инструкции, добавляет их в транзакцию, а затем подписывает и отправляет транзакцию.

Входные параметры

NameRequiredTypeDescription
descriptionoptionalstringОписание транзакции
instructionrequiredmapИнструкции для добавления в транзакцию
signersrequiredarray[string]Ссылки на конструкты подписантов
commitment_leveloptionalstringУровень подтверждения
rpc_api_urlrequiredstringURL для 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обязательно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 аккаунта authority
fund_recipientопциональноboolСоздать и пополнить token account получателя при необходимости
signersобязательноarray[string]Ссылки на конструкции подписантов

Выходные данные

НазваниеТипОписание
signaturestringВычисленная подпись транзакции
recipient_token_addresspubkeyАдрес 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, owner, data и executable для аккаунта
  • set_token_account — Задать сумму, делегата, делегированную сумму и authority закрытия для token account
  • clone_program_account — Клонировать program account из исходного program ID в целевой program ID
  • set_program_authority — Задать authority программы
  • deploy_program — Развернуть программу непосредственно на surfnet (через прямую запись в аккаунт, без транзакций)
  • reset_account — Сбросить аккаунт, удалив его из локального кэша для повторного получения из вышестоящего узла
  • stream_account — Транслировать данные аккаунта из мейннета, чтобы локальные данные всегда соответствовали мейннету

Входные данные

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

set_account

Устанавливает данные аккаунта непосредственно на surfnet.

НазваниеОбязательноТипОписание
public_keyобязательноstringПубличный ключ аккаунта для установки
account_pathопциональноstringПуть к JSON-файлу, содержащему данные аккаунта для установки. Если указан, остальные поля игнорируются
lamportsопциональноintegerКоличество lamports, которое должно быть установлено для аккаунта
dataопциональноbytesДанные для записи в аккаунт
ownerопциональноstringOwner, устанавливаемый для аккаунта
executableопциональноboolСостояние исполняемости, устанавливаемое для аккаунта
rent_epochопциональноintegerEpoch, в котором аккаунт будет освобождён от арендной платы

Необходимо указать хотя бы один из следующих параметров: 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необязательныйstringID Token Program. Допустимые значения: token2020, token2022 или публичный ключ (по умолчанию: token2020)
amountнеобязательныйintegerКоличество токенов для установки
delegateнеобязательныйstringПубличный ключ делегата для установки или null для сброса
stateнеобязательныйstringСостояние token account. Допустимые значения: initialized, frozen или uninitialized
delegated_amountнеобязательныйintegerКоличество токенов для делегирования
close_authorityнеобязательныйstringПубличный ключ close authority для установки или null для сброса

Необходимо указать хотя бы один из следующих параметров: amount, delegate, state, delegated_amount или close_authority.

clone_program_account

Клонирует program account из одного ID программы в другой в surfnet.

ИмяОбязательныйТипОписание
source_program_idобязательныйstringПубличный ключ программы для клонирования
destination_program_idобязательныйstringЦелевой публичный ключ программы

set_program_authority

Устанавливает или удаляет полномочия на обновление программы в surfnet.

НазваниеОбязательныйТипОписание
program_idобязательныйstringПубличный ключ программы, для которой устанавливаются полномочия
authorityнеобязательныйstringНовые полномочия для программы. Если не указано, полномочия программы будут установлены в None (делая её неизменяемой)

deploy_program

Развёртывает программу непосредственно в surfnet через запись данных аккаунта (не через транзакции).

НазваниеОбязательныйТипОписание
program_idобязательныйstringПубличный ключ развёртываемой программы
binary_pathобязательныйstringПуть к .so-файлу программы (например, ./target/deploy/my_program.so)
authorityнеобязательныйstringПубличный ключ владельца полномочий над программой после её развёртывания. Если не указано, программа не будет иметь полномочий
idl_pathнеобязательныйstringПуть к IDL-файлу программы (например, ./target/idl/my_program.json)

reset_account

Сбрасывает аккаунт в surfnet, удаляя его из локального кэша, чтобы он был повторно получен из вышестоящей сети.

НазваниеОбязательныйТипОписание
public_keyобязательныйstringПубличный ключ аккаунта для сброса
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?