솔라나 문서코드형 인프라SVM 애드온

SVM 액션

이 액션들은 트랜잭션 빌드, 서명 및 브로드캐스트를 위한 SVM 애드온을 사용할 때 제공됩니다.

deploy_program

svm::deploy_program는 지정된 SVM 호환 네트워크에 Solana 프로그램을 배포합니다.

입력값

이름필수 여부타입설명
description선택string배포 액션에 대한 설명
program필수object배포할 Solana 프로그램 아티팩트
payer선택string배포 비용을 지불하는 서명자 참조
authority필수string프로그램 권한을 가진 서명자 참조
commitment_level선택string커밋 수준 ('processed', 'confirmed', 'finalized')
auto_extend선택boolprogram 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필수string토큰 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 ID에서 대상 program ID로 program account 복제
  • 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

lamports, data, owner, executable, 또는 rent_epoch 중 적어도 하나는 제공되어야 합니다 (account_path를 사용하는 경우 제외).

set_token_account

surfnet에서 token account 데이터를 설정합니다. associated token account는 소유자의 공개 키와 토큰 민트로부터 자동으로 도출됩니다.

이름필수 여부타입설명
public_key필수string업데이트할 토큰 소유자 계정의 공개 키
token필수string토큰 심볼(예: "usdc", "bonk") 또는 토큰 민트의 공개 키
token_program선택stringToken Program ID. 유효한 값은 token2020, token2022, 또는 공개 키입니다 (기본값: token2020)
amount선택integer설정할 토큰 수량
delegate선택string설정할 위임자의 공개 키, 또는 초기화하려면 null
state선택stringtoken account의 상태. 유효한 값은 initialized, frozen, 또는 uninitialized
delegated_amount선택integer위임할 토큰 수량
close_authority선택string설정할 클로즈 권한의 공개 키, 또는 초기화하려면 null

amount, delegate, state, delegated_amount, 또는 close_authority 중 적어도 하나는 제공되어야 합니다.

clone_program_account

surfnet에서 한 프로그램 ID의 program account를 다른 프로그램 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?

목차

페이지 편집