로컬 실행 Move 프로그램
이 자습서는 로컬 블록체인에 Move 모듈을 게시하고 Move 트랜잭션 스크립트를 실행하도록 안내합니다.기존 Move 거래 스크립트 자체가 지원하지 않는 작업을 수행하려면 Move 모듈을 만들고 발표하며, 이 모듈을 사용하기 위해 스크립트를 작성할 수 있습니다.Libra CLI 클라이언트는
dev
명령을 사용하여 로컬 Move 프로그램을 컴파일, 제작 및 실행합니다.하위 명령 목록을 보려면 CLI에 dev
을 입력합니다.로컬 블록체인에 있는 Move 모듈의 계정을 생성, 컴파일 및 게시하려면 Move 모듈의 다음 지침을 따르십시오.Move 트랜잭션 스크립트를 컴파일하고 실행하려면 다음 트랜잭션 스크립트의 지침을 따르십시오.
Move 모듈 컴파일 및 게시
로컬 검증기 노드 네트워크 시작
우선 로컬 검증기 네트워크를 실행합니다.로컬 네트워크 문서를 시작하는 것을 참고하십시오.
계정 만들기
각 Move 모듈과 리소스 유형은 특정 계정 주소로 관리됩니다.예를 들어
Libra
모듈은 주소가 0x1
인 계정에서 위탁 관리한다.Move 코드는 다른 모듈 또는 트랜잭션 스크립트에서 Libra
모듈을 가져오려면 use 0x1::Libra
을 지정합니다.Move 모듈을 릴리즈하기 전에 관리할 계정을 만들어야 합니다.
libra% account create
>> Creating/retrieving next local account from wallet
Created/retrieved local account #0 address 717da70a461fef6307990847590ad7af
위의 출력에서 0은 사용자가 방금 만든 계정의 인덱스이고 16진수 문자열은 계정의 주소입니다.색인은 로컬에서 이 계정을 인용하는 편리한 방법일 뿐
ref_id
이라고도 부른다.계정 생성에 대한 더 많은 정보는
을 참고하십시오.create
명령은 로컬 스푼 쌍을 생성합니다.로컬 블록체인에 계정을 만들려면 다음과 같이 계정에 통화를 입력해야 합니다.libra% account mintb 0 76 Coin1
>> Creating recipient account before minting from faucet
waiting ....
transaction executed!
no events emitted
>> Sending coins from faucet
waiting ....
transaction executed!
Finished sending coins from faucet!
로컬 블록체인에서 계정이 성공적으로 생성되었는지 확인하려면 계정 잔액을 조회하십시오.
libra% query balance 0
Balance is: 76.000000Coin1
Move 모듈 만들기
SimpleFee
이라는 간단한 모듈로 시작하겠습니다.이 모듈은 모든 계좌의 처리 비용을 실현하여 지불 거래에 추가할 수 있다.계정은 체인에 있는 Move 자원의 비용 금액을 지정할 수 있으며 각 화폐 유형에 대해 비용을 지불해야 한다.계정 소유자는 비용 금액을 설정할 수 있으며 누구나 비용을 검색하여 지불에 추가할 수 있다.다음은 이 모듈의 Move 코드를 제공합니다.첫 번째 줄의 주소를 새로 만든 계정의 주소로 변경하고 SimpleFee.move
이라는 파일에 저장합니다.계정 주소가 "0x"접두어로 유지되는지 확인합니다.address 0x717da70a461fef6307990847590ad7af {
module SimpleFee {
// A simple fixed-price per-account processing fee that can be added
// to payment transactions. There is a different fee for each CoinType.
resource struct Fee {
fee: u64
}
// Set the fee amount.
public fun set_fee(account: &signer, fee: u64) {
move_to(account, Fee { fee })
}
// Get the fee for an account.
public fun get_fee(account: address): u64 acquires Fee {
if (exists>(account))
borrow_global>(account).fee
else
0
}
}
}
Move 모듈 컴파일
SimpleFee.move
을 컴파일하기 위해 dev 컴파일 명령을 사용합니다.libra% dev compile 0
Move 코드는
.Move
파일의 형식으로 컴파일러를 입력하고 컴파일러가 해당하는 바이트 코드 파일을 출력한다.이 모듈을 블록체인의 계정에 게시할 준비가 되었을 때 이 바이트 파일을 사용하십시오.move 파일.모듈을 성공적으로 컴파일하면 출력에서 다음과 같은 메시지를 볼 수 있습니다. 이것은
SimpleFee.move
이 생성한 바이트 파일을 컴파일하는 경로를 포함합니다.Successfully compiled a program at:
/tmp/741fdedbc67720028e60cf637b835a6c/modules/0_SimpleFee.mv
컴파일된 모듈 게시
로컬 블록체인에 모듈 바이트를 게시하려면
dev publish
명령을 실행하고 컴파일된 모듈 바이트 파일의 경로를 사용하십시오.libra% dev publish 0 /var/folders/tq/8gxrrmhx16376zxd5r4h9hhn_x1zq3/T/b8639bd9fe2403874bbfde5643486bde/modules/0_SimpleFee.mv
waiting .....
transaction executed!
no events emitted.
Successfully published module
dev publish
명령을 성공적으로 집행한 후 SimpleFee
의 바이트 코드는 발송자의 계좌에서 발표될 것이다.SimpleFee
에서 설명한 과정과 유형을 사용하려면 다른 거래 스크립트와 모듈은 use ::SimpleFee
을 통해 가져올 수 있습니다.
에서 발표된 후속 모듈은 SimpleFee
으로 명명할 수 없습니다.각 계정에는 지정된 이름의 모듈이 하나만 있을 수 있습니다.
에서 두 번째 SimpleFee
이라는 모듈을 발표하려 하면 거래가 실패할 것이다.거래 스크립트 컴파일 및 실행
거래 스크립트 만들기
SimpleFee
모듈을 사용하려면 먼저 거래 스크립트를 만들어서 비용 금액을 설정합니다.다음 스크립트에서 생성된 계정과 일치하도록 SimpleFee
계정 주소를 편집한 다음 set_lbr_fee.move
으로 저장합니다.script {
use 0x1::Coin1::Coin1;
use 0x717da70a461fef6307990847590ad7af::SimpleFee;
fun set_lbr_fee(account: &signer, fee: u64) {
SimpleFee::set_fee(account, fee)
}
}
CLI 클라이언트는 현재 통화 코드를 사용자 정의 스크립트의 통화 유형으로 변환하지 않으므로 이 예제 스크립트는 LBR 코인을 사용하도록 하드코딩됩니다.)
추가 비용을 지불하기 위해 사용자 정의 스크립트가 필요합니다. 따라서 같은 방법으로 아래 스크립트에서 계정 주소를 편집하여pay 로 저장합니다.lbr_with_fee.move:
script {
use 0x1::LibraAccount;
use 0x1::Coin1::Coin1;
use 0x717da70a461fef6307990847590ad7af::SimpleFee;
fun pay_lbr_with_fee(payer: &signer, payee: address, amount: u64) {
let payer_withdrawal_cap = LibraAccount::extract_withdraw_capability(payer);
let total = amount + SimpleFee::get_fee(payee);
LibraAccount::pay_from(&payer_withdrawal_cap, payee, total, x"", x"");
LibraAccount::restore_withdraw_capability(payer_withdrawal_cap);
}
}
거래 스크립트 컴파일
거래 스크립트를 컴파일하기 위해
dev compile
명령을 사용합니다.libra% dev compile 0
set_lbr_fee.move
은 Move 소스 파일로 set_lbr_fee.move
을 성공적으로 컴파일한 후입니다.Move 컴파일러는 해당 바이트 코드 파일을 출력합니다.이 스크립트를 실행할 때, 이 바이트 파일을 사용합니다. (.move 파일이 아닙니다.)스크립트가 성공적으로 컴파일되면 출력에서 바이트 코드 파일의 경로가 표시됩니다.Successfully compiled a program at:
/tmp/897541d70c8578528ed6d7ae98e044d0/scripts/set_lbr_fee.mv
pay_lbr_with_fee.move
반복 컴파일 단계:libra% dev compile 0
>> Compiling program
Successfully compiled a program at:
/var/folders/tq/8gxrrmhx16376zxd5r4h9hhn_x1zq3/T/5fa11d0acf5d53e8d257ab31534b2017/scripts/pay_lbr_with_fee.mv
트랜잭션 스크립트 실행
사용자 정의 스크립트를 실행하려면 위에서 거래 스크립트를 컴파일한 바이트 출력에
dev execute
명령을 사용하십시오.먼저 set_lbr_fee
스크립트를 사용하여 비용을 지정합니다.dev execute
명령에 전달되는 정확한 매개 변수 집합은 특정 스크립트가 원하는 매개 변수에 달려 있습니다.libra% dev execute 0 /var/folders/tq/8gxrrmhx16376zxd5r4h9hhn_x1zq3/T/5fa11d0acf5d53e8d257ab31534b2017/scripts/set_lbr_fee.mv 10000
waiting .....
transaction executed!
no events emitted
Successfully finished execution
/var/folders/tq/8gxrrmhx16376zxd5r4h9hhn_x1zq3/T/5fa11d0acf5d53e8d257ab31534b2017/scripts/set_lbr_fee.mv
- 스크립트가 컴파일된 경로입니다.그런 다음 다른 계정을 설정하고
pay_lbr_with_fee
스크립트를 사용하여 추가 요금을 지불할 수 있습니다.libra% account create
>> Creating/retrieving next local account from wallet
Created/retrieved local account #1 address aed273e4e7b36276e1442656cc16eb31
libra% account mintb 1 10 LBR
>> Creating recipient account before minting from faucet
waiting ....
transaction executed!
no events emitted
>> Sending coins from faucet
waiting ....
transaction executed!
Finished sending coins from faucet!
libra% dev execute 1 /var/folders/tq/8gxrrmhx16376zxd5r4h9hhn_x1zq3/T/5fa11d0acf5d53e8d257ab31534b2017/scripts/pay_lbr_with_fee.mv 0x717da70a461fef6307990847590ad7af 1000000
waiting ....
transaction executed!
Successfully finished execution
/var/folders/tq/8gxrrmhx16376zxd5r4h9hhn_x1zq3/T/5fa11d0acf5d53e8d257ab31534b2017/scripts/pay_lbr_with_fee.mv
- 스크립트가 컴파일된 경로 0x717da70a461fef6307990847590ad7af
- 수취인 계좌 주소(계좌 인덱스 0).이 거래의 결과는 계좌 잔액을 조회하여 관찰할 수 있다.
libra% query balance 0
Balance is: 77.010000Coin1
libra% query balance 1
Balance is: 8.990000Coin1
예상대로 1.0개의 코인1 결제가 0.01코인1 비용을 증가시켰기 때문에 1.01코인1 결제는 계좌1에서 계좌0으로 이체되었다.
문제 해결
Move 프로그램 컴파일
클라이언트에서 Move 소스 파일을 찾을 수 없는 경우 다음과 같은 오류가 발생합니다.
libra% dev compile 0 ~/my-tscripts/set_lbr_fee.move
>> Compiling program
Error: No such file or directory '~/my-tscripts/set_lbr_fee.move'
compilation failed
클라이언트가 현재 파도선 확장을 실행하지 않았기 때문에 홈 디렉터리에 있는 경로를 표시해야 할 수도 있습니다.
다음 오류가 발생하면
dev compile
명령의 사용법을 참고하여 필요한 매개 변수를 지정하고 다시 컴파일을 시도하십시오.Invalid number of arguments for compilation
컴파일된 모듈 게시
하나의 모듈을 컴파일하여 하나의 계정을 사용하고 (예: dev compile 0...) 그것을 다른 계정에 발표하려고 시도하면 (예: dev publish 1...) 다음과 같은 오류가 발생합니다.
libra% dev publish 1 /var/folders/tq/8gxrrmhx16376zxd5r4h9hhn_x1zq3/T/b8639bd9fe2403874bbfde5643486bde/modules/0_SimpleFee.mv
transaction failed to execute; status: VerificationError!
컴파일된 모듈에는 게시할 모듈의 계정 주소가 포함되어 있으며, Move 가상 머신(VM)은 거래 발송자가 발송자의 자신의 계정 주소에서만 모듈을 발표할 수 있습니다.만약 그렇지 않다면, 다른 사용자는 당신의 계좌 아래에서 모듈을 발표할 수 있습니다!이 오류를 복구하려면 필요한 발송자 주소를 사용하여 모듈을 다시 컴파일하십시오.
컴파일 모듈에 정확한 경로를 제공하지 않으면 이 오류를 볼 수 있습니다.
libra% dev publish 0 incorrect-path-to-compiled-module
No such file or directory (os error 2)
인덱스 1 계정이 없는 경우 모듈을 1에 게시하면 다음 오류가 발생합니다.
Unable to find account by account reference id: 1, to see all existing accounts, run: 'account list'
동일한 발신자 계정 주소에서 기존 모듈을 재게시/업데이트해도 블록체인에는 영향을 미치지 않습니다.이것은 실패한 거래이지만, 송신자 계좌에서gas를 공제하고 송신자 계좌의 서열 번호를 1 증가시킨다.서로 다른 발송자의 계좌 주소에서 같은 모듈을 발표할 수 있는데 전제는 모듈이 이 계좌 주소로 컴파일된 것이다.
트랜잭션 스크립트 실행
보낸 사람의 계정 인덱스가 잘못되면 다음 오류가 발생합니다.
libra% dev execute 2 /var/folders/tq/8gxrrmhx16376zxd5r4h9hhn_x1zq3/T/5fa11d0acf5d53e8d257ab31534b2017/scripts/set_lbr_fee.mv 10000
Unable to find account by account reference id: 2, to see all existing accounts, run: 'account list'
다음 오류는 거래 스크립트의 매개 변수를 잃어버리거나 하나 이상의 매개 변수 형식이 잘못되었음을 나타냅니다.
libra% dev execute 0 /var/folders/tq/8gxrrmhx16376zxd5r4h9hhn_x1zq3/T/5fa11d0acf5d53e8d257ab31534b2017/scripts/set_lbr_fee.mv
transaction failed to execute; status: VerificationError!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.