Solana 文档基础设施即代码SVM 插件

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_idstring已部署程序的程序 ID
program_idlstring程序 IDL
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必填stringAPI 请求的 URL

输出

名称类型描述
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必填stringAPI 请求的 URL

输出

名称类型描述
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必填stringtoken mint account 地址
recipient必填string接收方的 SVM 地址
authority可选string授权账户的 pubkey
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 - 设置账户的 lamport、所有者、数据及可执行字段
  • set_token_account - 设置 token account 的金额、委托人、委托金额及关闭权限
  • clone_program_account - 将 program account 从源程序 ID 克隆到目标程序 ID
  • set_program_authority - 设置程序的权限
  • deploy_program - 直接将程序部署到 surfnet(通过直接写入账户,而非交易)
  • reset_account - 重置账户,将其从本地缓存中移除以从上游重新获取
  • stream_account - 从主网流式传输账户数据,使本地数据始终与主网保持同步

输入

名称是否必填类型描述
description可选string设置的描述
rpc_api_url必填stringAPI 请求的 URL

set_account

直接在 surfnet 上设置账户数据。

名称是否必填类型描述
public_key必填string要设置的账户公钥
account_path可选string包含待设置账户数据的 JSON 文件路径。若提供,则忽略其他字段
lamports可选integer账户应设置的 lamport 数量
data可选bytes要在账户中设置的数据
owner可选string要为账户设置的所有者
executable可选bool要为账户设置的可执行状态
rent_epoch可选integer账户免租金的 epoch

lamportsdataownerexecutablerent_epoch 中至少需要提供一个(除非使用 account_path)。

set_token_account

在 surfnet 上设置 token account 数据。associated token account 将根据所有者的公钥和 token mint 自动派生。

名称是否必填类型描述
public_key必填string要更新的 token 所有者账户的公钥
token必填stringtoken 符号(例如 "usdc"、"bonk")或 token mint 的公钥
token_program可选stringToken Program ID。有效值为 token2020token2022 或某个公钥(默认值:token2020
amount可选integer要设置的 token 数量
delegate可选string要设置的委托人公钥,或填 null 以清除
state可选stringtoken account 的状态。有效值为 initializedfrozenuninitialized
delegated_amount可选integer要委托的 token 数量
close_authority可选string要设置的关闭权限公钥,或填 null 以清除

amountdelegatestatedelegated_amountclose_authority 中至少需要提供一个。

clone_program_account

将一个 program account 从一个程序 ID 克隆到 surfnet 上的另一个程序 ID。

名称是否必填类型描述
source_program_id必填string要克隆的程序的公钥
destination_program_id必填string该程序的目标公钥

set_program_authority

设置或移除 surfnet 上程序的升级权限。

名称是否必填类型描述
program_id必填string要设置权限的程序的 pubkey
authority选填string程序的新权限。若未提供,程序的权限将被设置为 None(使其不可变)

deploy_program

通过账户数据写入(而非交易)的方式,将程序直接部署到 surfnet。

名称是否必填类型描述
program_id必填string被部署程序的 pubkey
binary_path必填string程序 .so 文件的路径(例如:./target/deploy/my_program.so
authority选填string程序部署后的权限方 pubkey。若未提供,程序将没有任何权限
idl_path选填string程序 IDL 文件的路径(例如:./target/idl/my_program.json

reset_account

重置 surfnet 上的账户,将其从本地缓存中移除,以便从上游网络重新获取。

名称是否必填类型描述
public_key必填string要重置账户的 pubkey
include_owned_accounts选填bool是否递归删除该账户所拥有的所有账户,默认值为 false

stream_account

将主网 RPC URL 的账户数据流式传输到 surfnet,使本地账户数据与主网保持同步。

名称是否必填类型描述
public_key必填string要流式传输的账户的 pubkey
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?

Table of Contents

Edit Page
©️ 2026 Solana 基金会版权所有