这些操作在使用 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) |
输出
| 名称 | 类型 | 描述 |
|---|---|---|
signatures | object | 计算得出的交易签名 |
program_id | string | 已部署程序的程序 ID |
program_idl | string | 程序 IDL |
action "deploy" "svm::deploy_program" {description = "Deploy hello world program"program = svm::get_program_from_anchor_project("hello_world")authority = signer.authoritypayer = 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 | API 请求的 URL |
输出
| 名称 | 类型 | 描述 |
|---|---|---|
signature | string | 交易计算签名 |
action "program_call" "svm::process_instructions" {description = "Invoke instructions"instruction {program_idl = variable.program.idlinstruction_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 | API 请求的 URL |
输出
| 名称 | 类型 | 描述 |
|---|---|---|
signature | string | 交易计算签名 |
action "send_sol" "svm::send_sol" {description = "Send some SOL"amount = svm::sol_to_lamports(1)signer = signer.callerrecipient = "zbBjhHwuqyKMmz8ber5oUtJJ3ZV4B6ePmANfGyKzVGV"}
send_token
svm::send_token 操作用于编码一笔发送指定代币的交易,对其签名并广播到网络。
输入
| 名称 | 是否必填 | 类型 | 描述 |
|---|---|---|---|
description | 可选 | string | 交易描述 |
amount | 必填 | integer | 发送的代币数量,以基本单位计 |
token | 必填 | string | token mint account 地址 |
recipient | 必填 | string | 接收方的 SVM 地址 |
authority | 可选 | string | 授权账户的 pubkey |
fund_recipient | 可选 | bool | 如有需要,创建并资助接收方 token account |
signers | 必填 | array[string] | 对签名者构造的引用列表 |
输出
| 名称 | 类型 | 描述 |
|---|---|---|
signature | string | 交易计算签名 |
recipient_token_address | pubkey | 接收方 token account 地址 |
source_token_address | pubkey | 来源 token account 地址 |
token_mint_address | pubkey | 代币铸造地址 |
action "send_sol" "svm::send_token" {description = "Send some tokens"amount = 1000000signers = [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 克隆到目标程序 IDset_program_authority- 设置程序的权限deploy_program- 直接将程序部署到 surfnet(通过直接写入账户,而非交易)reset_account- 重置账户,将其从本地缓存中移除以从上游重新获取stream_account- 从主网流式传输账户数据,使本地数据始终与主网保持同步
输入
| 名称 | 是否必填 | 类型 | 描述 |
|---|---|---|---|
description | 可选 | string | 设置的描述 |
rpc_api_url | 必填 | string | API 请求的 URL |
set_account
直接在 surfnet 上设置账户数据。
| 名称 | 是否必填 | 类型 | 描述 |
|---|---|---|---|
public_key | 必填 | string | 要设置的账户公钥 |
account_path | 可选 | string | 包含待设置账户数据的 JSON 文件路径。若提供,则忽略其他字段 |
lamports | 可选 | integer | 账户应设置的 lamport 数量 |
data | 可选 | bytes | 要在账户中设置的数据 |
owner | 可选 | string | 要为账户设置的所有者 |
executable | 可选 | bool | 要为账户设置的可执行状态 |
rent_epoch | 可选 | integer | 账户免租金的 epoch |
lamports、data、owner、executable 或 rent_epoch
中至少需要提供一个(除非使用 account_path)。
set_token_account
在 surfnet 上设置 token account 数据。associated token account 将根据所有者的公钥和 token mint 自动派生。
| 名称 | 是否必填 | 类型 | 描述 |
|---|---|---|---|
public_key | 必填 | string | 要更新的 token 所有者账户的公钥 |
token | 必填 | string | token 符号(例如 "usdc"、"bonk")或 token mint 的公钥 |
token_program | 可选 | string | Token Program ID。有效值为 token2020、token2022 或某个公钥(默认值:token2020) |
amount | 可选 | integer | 要设置的 token 数量 |
delegate | 可选 | string | 要设置的委托人公钥,或填 null 以清除 |
state | 可选 | string | token account 的状态。有效值为 initialized、frozen 或 uninitialized |
delegated_amount | 可选 | integer | 要委托的 token 数量 |
close_authority | 可选 | string | 要设置的关闭权限公钥,或填 null 以清除 |
amount、delegate、state、delegated_amount 或 close_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 balanceset_account {public_key = signer.caller.public_keylamports = 999999999}// Set token balanceset_token_account {public_key = signer.caller.public_keytoken = "usdc"amount = 1000000}// Clone a programclone_program_account {source_program_id = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"destination_program_id = variable.my_program_id}// Set program authorityset_program_authority {program_id = variable.my_program_idauthority = signer.caller.public_key}// Deploy a program directlydeploy_program {program_id = variable.my_program_idbinary_path = "./target/deploy/my_program.so"idl_path = "./target/idl/my_program.json"}// Reset an account to re-fetch from upstreamreset_account {public_key = variable.some_pubkey}// Stream account data from mainnetstream_account {public_key = variable.some_pubkeyinclude_owned_accounts = true}}
Is this page helpful?