Tài liệu SolanaCơ sở hạ tầng dưới dạng mãSVM Addon

SVM Actions

Các hành động này khả dụng khi sử dụng addon SVM để xây dựng, ký và phát sóng giao dịch.

deploy_program

svm::deploy_program triển khai một chương trình Solana lên mạng tương thích SVM được chỉ định.

Đầu vào

NameRequiredTypeDescription
descriptionoptionalstringMô tả về hành động triển khai
programrequiredobjectCác artifact của chương trình Solana cần triển khai
payeroptionalstringTham chiếu đến một signer để thanh toán chi phí triển khai
authorityrequiredstringTham chiếu đến một signer cho quyền quản lý chương trình
commitment_leveloptionalstringMức độ cam kết ('processed', 'confirmed', 'finalized')
auto_extendoptionalboolCó tự động mở rộng program account hay không (mặc định: true)

Đầu ra

NameTypeDescription
signaturesobjectChữ ký giao dịch đã được tính toán
program_idstringID chương trình của chương trình đã triển khai
program_idlstringIDL của chương trình
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

Hành động svm::process_instructions mã hóa các lệnh, thêm chúng vào một giao dịch, rồi ký và phát sóng giao dịch đó.

Đầu vào

NameRequiredTypeDescription
descriptionoptionalstringMô tả về giao dịch
instructionrequiredmapCác lệnh cần thêm vào giao dịch
signersrequiredarray[string]Tham chiếu đến các cấu trúc signer
commitment_leveloptionalstringMức độ cam kết
rpc_api_urlrequiredstringURL cho các yêu cầu API

Đầu ra

TênKiểuMô tả
signaturestringChữ ký được tính toán của giao dịch
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

Hành động svm::send_sol mã hóa một giao dịch gửi SOL, ký và phát sóng lên mạng.

Đầu vào

TênBắt buộcKiểuMô tả
descriptiontùy chọnstringMô tả về giao dịch
amountbắt buộcintegerSố lượng cần gửi, tính bằng lamport
recipientbắt buộcstringĐịa chỉ SVM của người nhận
signerbắt buộcstringTham chiếu đến một cấu trúc signer
commitment_leveltùy chọnstringMức độ cam kết
rpc_api_urlbắt buộcstringURL cho các yêu cầu API

Đầu ra

TênKiểuMô tả
signaturestringChữ ký được tính toán của giao dịch
action "send_sol" "svm::send_sol" {
description = "Send some SOL"
amount = svm::sol_to_lamports(1)
signer = signer.caller
recipient = "zbBjhHwuqyKMmz8ber5oUtJJ3ZV4B6ePmANfGyKzVGV"
}

send_token

Hành động svm::send_token mã hóa một giao dịch gửi token được chỉ định, ký và phát sóng lên mạng.

Đầu vào

TênBắt buộcKiểuMô tả
descriptiontùy chọnstringMô tả về giao dịch
amountbắt buộcintegerSố lượng token cần gửi, tính theo đơn vị cơ sở
tokenbắt buộcstringĐịa chỉ của token mint account
recipientbắt buộcstringĐịa chỉ SVM của người nhận
authoritytùy chọnstringpubkey của tài khoản authority
fund_recipienttùy chọnboolTạo và cấp vốn cho token account của người nhận nếu cần
signersbắt buộcarray[string]Tham chiếu đến các cấu trúc signer

Đầu ra

TênLoạiMô tả
signaturestringChữ ký đã được tính toán của giao dịch
recipient_token_addresspubkeyĐịa chỉ associated token account của người nhận
source_token_addresspubkeyĐịa chỉ token account nguồn
token_mint_addresspubkeyĐịa chỉ token 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 có thể được dùng để cấu hình một surfnet.

Các thao tác sau được hỗ trợ:

  • set_account - Đặt các trường lamports, owner, data và executable của một tài khoản
  • set_token_account - Đặt số lượng, delegate, số lượng được ủy quyền và close authority cho một token account
  • clone_program_account - Sao chép một program account từ ID chương trình nguồn sang ID chương trình đích
  • set_program_authority - Đặt authority của một chương trình
  • deploy_program - Triển khai một chương trình trực tiếp lên surfnet (thông qua ghi tài khoản trực tiếp, không qua giao dịch)
  • reset_account - Đặt lại một tài khoản, xóa nó khỏi bộ nhớ đệm cục bộ để tải lại từ upstream
  • stream_account - Truyền dữ liệu tài khoản từ mainnet để dữ liệu cục bộ luôn khớp với mainnet

Đầu vào

TênBắt buộcLoạiMô tả
descriptiontùy chọnstringMô tả về thiết lập
rpc_api_urlbắt buộcstringURL cho các yêu cầu API

set_account

Đặt dữ liệu tài khoản trực tiếp trên surfnet.

TênBắt buộcLoạiMô tả
public_keybắt buộcstringKhóa công khai của tài khoản cần đặt
account_pathtùy chọnstringĐường dẫn đến tệp JSON chứa dữ liệu tài khoản cần đặt. Nếu được cung cấp, các trường khác sẽ bị bỏ qua
lamportstùy chọnintegerSố lượng lamport mà tài khoản sẽ được đặt
datatùy chọnbytesDữ liệu cần đặt trong tài khoản
ownertùy chọnstringOwner cần đặt cho tài khoản
executabletùy chọnboolTrạng thái khả năng thực thi cần đặt cho tài khoản
rent_epochtùy chọnintegerepoch mà tài khoản sẽ được miễn phí thuê

Ít nhất một trong số lamports, data, owner, executable, hoặc rent_epoch phải được cung cấp (trừ khi sử dụng account_path).

set_token_account

Đặt dữ liệu token account trên surfnet. associated token account được tự động suy ra từ khóa công khai của chủ sở hữu và token mint.

NameRequiredTypeDescription
public_keyrequiredstringKhóa công khai của tài khoản chủ sở hữu token cần cập nhật
tokenrequiredstringKý hiệu token (ví dụ: "usdc", "bonk") hoặc khóa công khai của token mint
token_programoptionalstringID của Token Program. Các giá trị hợp lệ là token2020, token2022, hoặc một khóa công khai (mặc định: token2020)
amountoptionalintegerSố lượng token cần đặt
delegateoptionalstringKhóa công khai của delegate cần đặt, hoặc null để xóa
stateoptionalstringTrạng thái của token account. Các giá trị hợp lệ là initialized, frozen, hoặc uninitialized
delegated_amountoptionalintegerSố lượng token cần ủy quyền
close_authorityoptionalstringKhóa công khai của close authority cần đặt, hoặc null để xóa

Ít nhất một trong số amount, delegate, state, delegated_amount, hoặc close_authority phải được cung cấp.

clone_program_account

Sao chép một program account từ ID chương trình này sang ID chương trình khác trên surfnet.

NameRequiredTypeDescription
source_program_idrequiredstringKhóa công khai của chương trình cần sao chép
destination_program_idrequiredstringKhóa công khai đích của chương trình

set_program_authority

Đặt hoặc xóa quyền nâng cấp của một chương trình trên surfnet.

TênBắt buộcKiểuMô tả
program_idbắt buộcstringpubkey của chương trình cần đặt quyền
authoritytùy chọnstringQuyền mới cho chương trình. Nếu không được cung cấp, quyền của chương trình sẽ được đặt thành None (khiến nó bất biến)

deploy_program

Triển khai một chương trình trực tiếp lên surfnet thông qua ghi dữ liệu tài khoản (không qua giao dịch).

TênBắt buộcKiểuMô tả
program_idbắt buộcstringpubkey của chương trình đang được triển khai
binary_pathbắt buộcstringVị trí của tệp .so của chương trình (ví dụ: ./target/deploy/my_program.so)
authoritytùy chọnstringpubkey của quyền quản lý chương trình sau khi triển khai. Nếu không được cung cấp, chương trình sẽ không có quyền quản lý
idl_pathtùy chọnstringVị trí của tệp IDL của chương trình (ví dụ: ./target/idl/my_program.json)

reset_account

Đặt lại một tài khoản trên surfnet, xóa nó khỏi bộ nhớ cache cục bộ để nó sẽ được tải lại từ mạng thượng nguồn.

TênBắt buộcKiểuMô tả
public_keybắt buộcstringpubkey của tài khoản cần đặt lại
include_owned_accountstùy chọnboolCó xóa đệ quy tất cả các tài khoản thuộc sở hữu của tài khoản này hay không. Mặc định là false

stream_account

Truyền dữ liệu tài khoản từ URL RPC mainnet đến surfnet, giữ cho dữ liệu tài khoản cục bộ luôn đồng bộ với mainnet.

TênBắt buộcKiểuMô tả
public_keybắt buộcstringpubkey của tài khoản cần truyền
include_owned_accountstùy chọnboolCó truyền đệ quy tất cả các tài khoản thuộc sở hữu của tài khoản này hay không. Mặc định là 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?