Move 编程语言最初是由 Facebook 的一个工程师团队为 Diem 支付网络创建的。Move 旨在成为一种与平台无关的语言,以支持跨不同区块链的通用库、工具和开发者社区,这些区块链具有截然不同的数据和执行模型。
原则 | 解释 |
---|---|
默认安全 | 金融系统的构建确保用户不会丢失资金。Move 设计旨在防止重入攻击、双重支付和算术溢出等错误。类型安全和编译时检查是安全性的重中之重。 |
运行时验证 | 字节码可以在运行时进行验证,确保没有问题,提供额外的安全性并防止恶意行为者。 |
形式化验证 | Aptos 上的 Move 提供规范语言,用于对合约进行形式化验证,证明不变量并有助于代码审计。 |
简洁性 | 命令和字节码保持简单,便于反编译、运行时验证和代码检查。使用常规编程语言进行区块链开发通常需要忽略语言的大部分内容,以使其适用于智能合约。 |
Aptos 合约使用 Move 编写,这是一种用于安全、沙盒化和形式化验证编程的下一代语言,适用于多个链。Move 允许开发者编写灵活管理和转移资产的程序,同时提供安全性和防止对这些资产的攻击。
hello_blockchain
示例,展示如何发布你的第一个 Move 模块这是一个 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 编译器和语言版本目前正在早期测试中。如果你有兴趣尝试,请查看此页面。