콘텐츠로 이동

스마트 컨트랙트

Aptos 컨트랙트는 여러 체인에서 사용되는 안전하고 샌드박스화되며 형식적으로 검증된 프로그래밍을 위한 차세대 언어인 Move를 사용하여 작성됩니다. Move는 개발자가 해당 자산에 대한 공격으로부터 보안과 보호를 제공하면서 자산을 유연하게 관리하고 전송하는 프로그램을 작성할 수 있게 해줍니다.

다음은 Move의 hello_blockchain 예제입니다

hello_blockchain.move
module hello_blockchain::message {
use std::error;
use std::signer;
use std::string;
use aptos_framework::event;
//:!:>resource
struct MessageHolder has key {
message: string::String,
}
//<:!:resource
#[event]
struct MessageChange has drop, store {
account: address,
from_message: string::String,
to_message: string::String,
}
/// There is no message present
const ENO_MESSAGE: u64 = 0;
#[view]
public fun get_message(addr: address): string::String acquires MessageHolder {
assert!(exists<MessageHolder>(addr), error::not_found(ENO_MESSAGE));
borrow_global<MessageHolder>(addr).message
}
public entry fun set_message(account: signer, message: string::String)
acquires MessageHolder {
let account_addr = signer::address_of(&account);
if (!exists<MessageHolder>(account_addr)) {
move_to(&account, MessageHolder {
message,
})
} else {
let old_message_holder = borrow_global_mut<MessageHolder>(account_addr);
let from_message = old_message_holder.message;
event::emit(MessageChange {
account: account_addr,
from_message,
to_message: copy message,
});
old_message_holder.message = message;
}
}
#[test(account = @0x1)]
public entry fun sender_can_set_message(account: signer) acquires MessageHolder {
let addr = signer::address_of(&account);
aptos_framework::account::create_account_for_test(addr);
set_message(account, string::utf8(b"Hello, Blockchain"));
assert!(
get_message(addr) == string::utf8(b"Hello, Blockchain"),
ENO_MESSAGE
);
}
}

Move 2를 지원하는 새로운 Move on Aptos 컴파일러가 있습니다. 자세한 정보는 이 페이지를 참조하세요.