Skip to main content
欢迎来到你的第一节烹饪课!在这一章,我们将完成三件重要的事情:
  1. 理解理念:为什么Aptos和Move值得你投入时间学习?
  2. 搭建厨房:配置专业的开发环境,准备好所有工具。
  3. 制作第一道菜:编写、部署并调用你的第一个Move合约。
请记住:不要跳过任何步骤。这些基础就像烹饪中的刀工和火候,决定了你未来能否做出美味的菜肴。

1.1 为什么选择Aptos和Move?

当你面对众多区块链平台和智能合约语言时,一个合理的问题是:为什么要选择Aptos和Move? 让我们从三个维度来回答这个问题。

Aptos的高性能特性:Block-STM并发引擎详解

想象一个餐厅只有一位厨师,即使他技艺高超,一次也只能服务一桌客人。这是许多传统区块链的工作方式——顺序处理交易 Aptos采用了不同的策略——Block-STM(软件事务内存并行执行) Block-STM的核心思想:
  1. 先乐观执行:假设大多数交易不冲突,让它们并行处理
  2. 再验证解决:如果发现冲突(比如两个交易同时修改同一数据),只重新执行冲突的部分
  3. 保持顺序性:最终结果与按顺序执行完全一致
实际效果:
  • 传统区块链(如以太坊):约15-45笔交易/秒
  • Aptos Block-STM:理论可达16万笔交易/秒(测试网实测数千笔/秒)
对于开发者来说,这意味着你的应用可以同时服务更多用户,且交易确认时间大幅缩短——用户体验接近Web2应用。

Move语言的核心哲学:资产即资源编程

如果说Block-STM是Aptos的”引擎”,那么Move语言就是它的”设计哲学”。Move的核心理念是:数字资产应该像现实世界的资产一样被对待 现实世界资产的三大特性:
  1. 不可复制:你不能凭空复制一张百元钞票
  2. 不可丢弃:你不能让钞票从世界上”消失”
  3. 所有权明确:钞票要么在你口袋里,要么在别人口袋里
Move通过能力(Abilities)系统将这些特性编程化:
// 定义一种"钞票"资产
struct BankNote has store, key {
    value: u64,
    serial_number: u128
}

// 对比:普通的数字记录
struct BalanceRecord has copy, drop, store {
    amount: u64
}
关键区别:
  • BankNote(钞票)没有copy能力 → 无法复制
  • BankNote没有drop能力 → 无法丢弃
  • BankNote只能move(移动)→ 必须明确转移所有权
这种设计让资产安全在编译期就被保障,而不是等到运行时才发现问题。许多其他链上常见的漏洞(如无限增发、资产丢失)在Move中几乎不可能发生。

生态定位:Aptos与Sui的差异

你可能会问:Sui也使用Move语言,它们有什么区别?
方面AptosSui
Move方言更接近原始Move有较多自定义语法
对象模型可选项(兼容传统)强制使用(一切都是对象)
共识机制拜占庭容错(BFT)拜占庭一致广播
开发体验渐进式学习曲线需要一开始就理解对象
生态成熟度较高(主网运行更久)较新但增长迅速
简单建议:
  • 如果你想要平滑的学习曲线更成熟的生态,选择Aptos
  • 如果你的应用天然适合对象模型(如游戏资产),可以考虑Sui
好消息是:学习Aptos Move会让你很容易掌握Sui Move,因为核心概念是相通的。

1.2 搭建你的开发厨房(The Workbench)

请严格按照步骤操作,确保每一步都成功后再继续。 踏上Aptos Move开发之旅的第一步,就是搭建一个稳定高效的开发环境。如同厨师在烧制丰盛大餐前需要准备好各种厨房工具,Move开发者也需要配置好必要的工具链。本章将引导您完成从零开始的环境搭建过程,确保您能够顺利编写、测试和部署 Move 智能合约。

安装与配置Aptos CLI

Aptos CLI是你的主厨刀——最核心的工具,它集成了账户管理、合约编译、部署、调试等核心功能。 Windows用户:
# 1. 打开PowerShell(管理员权限)
# 2. 使用winget安装(推荐)
winget install AptosLabs.aptoscli

# 或者下载MSI安装包:
# https://github.com/aptos-labs/aptos-core/releases
Mac用户:
# 1. 使用Homebrew安装(推荐)
brew install aptos

# 2. 或者下载PKG安装包
Linux用户:
# 1. 下载二进制文件
wget https://github.com/aptos-labs/aptos-core/releases/download/aptos-cli-v2.4.0/aptos-cli-2.4.0-Ubuntu-x86_64.zip

# 2. 解压并移动到PATH
unzip aptos-cli-2.4.0-Ubuntu-x86_64.zip
chmod +x aptos
sudo mv aptos /usr/local/bin/

# 3. 验证安装
aptos --version
验证安装:
# 所有平台通用
aptos --version
# 应该输出类似:aptos-cli 2.4.0

配置IDE:VS Code + Move on Aptos插件

IDE是你的料理台,一个舒适的开发环境至关重要。 步骤:
  1. 安装VS Code官网下载
  2. 安装Move on Aptos插件
    • 打开VS Code
    • 点击左侧扩展图标(或按Ctrl+Shift+X
    • 搜索”Move on Aptos”
    • 安装由Aptos Labs发布的插件
  3. 配置插件(可选但推荐):
    // 在settings.json中添加
    {
      "move-analyzer.server.enable": true,
      "move-analyzer.server.path": "~/.aptos/bin/aptos", // 你的aptos路径
      "[move]": {
        "editor.defaultFormatter": "movebit.move-analyzer"
      }
    }
    

创建并设置Aptos钱包

钱包是你的保险柜,保管着你的资产和身份。 推荐钱包:Petra(Aptos官方钱包) 安装步骤:
  1. 访问 Petra官网
  2. 根据浏览器选择安装:
    • Chrome: Chrome Web Store
    • Firefox: Add-ons for Firefox
  3. 点击”Add to Chrome/Firefox”安装
创建新钱包: ⚠️ 关键安全警告:
  • 绝不截图助记词
  • 绝不分享给任何人
  • 手写备份在纸上,存放在安全处
  • 助记词丢失 = 资产永久丢失
获取你的钱包地址: 安装后,点击Petra插件图标,在主页面可以看到以0x开头的地址。复制这个地址,我们马上要用。

获取测试代币:Faucet获取指南

测试代币是你的练习食材,用于在测试网免费练习。 方法一:通过Petra钱包(最简单)
  1. 确保Petra网络切换到”Testnet”
  2. 点击”Receive”按钮
  3. 选择”Testnet Faucet”
  4. 点击”Claim”领取10000测试APT
方法二:通过Aptos CLI
# 将<YOUR_ADDRESS>替换为你的钱包地址
aptos account fund-with-faucet \
  --account <YOUR_ADDRESS> \
  --amount 10000
方法三:通过网页Faucet
  1. 访问 Aptos Faucet
  2. 输入你的钱包地址
  3. 点击”Fund Account”
验证余额:
aptos account list --account <YOUR_ADDRESS>
# 应该显示约10000 APT余额

🍳 厨师提示:开发网络选择策略

Aptos提供多种网络环境,就像不同的厨房:
网络用途Gas代币特点
本地节点深度调试免费生成完全控制,重启清零
开发网功能测试Faucet领取频繁重置,最新功能
测试网集成测试Faucet领取稳定,模拟主网
主网生产环境真实APT真实资产,不可逆
建议学习路径:
  1. 第1-2章:在测试网练习
  2. 第3-5章:结合本地节点深度调试
  3. 项目实战:回到测试网完整测试
  4. 最终部署:主网发布

1.3 你的第一道Move菜品

现在,让我们开始真正的烹饪!我们将创建、部署并调用一个简单的Hello World合约。

项目初始化:详解aptos move init

首先,创建一个干净的工作目录:
# 1. 创建项目目录
mkdir my-first-move-project
cd my-first-move-project

# 2. 初始化Move项目
aptos move init --name hello_move
查看生成的项目结构:
my-first-move-project/
├── Move.toml          # 项目配置文件
├── sources/           # Move源文件目录
├── build/             # 编译输出(自动生成)
└── tests/             # 测试文件目录
理解Move.toml文件:
[package]
name = "hello_move"
version = "1.0.0"

# 依赖配置 - Aptos标准库
[dependencies]
AptosFramework = { git = "https://github.com/aptos-labs/aptos-core.git", subdir = "aptos-move/framework/aptos-framework/", rev = "testnet" }

# 命名地址 - 相当于变量名,提高可读性
[addresses]
hello_move = "_"  # 下划线表示"使用当前账户地址"
std = "0x1"       # 标准库地址(固定)

编写Hello World模块

sources/目录下创建hello.move文件:
// 文件:sources/hello.move

// 模块声明:地址::模块名
module hello_move::hello {
    // 导入标准库中的调试功能
    use std::debug;
    
    // 定义一个常量(问候语)
    const GREETING: vector<u8> = b"Hello, Aptos Move!";
    
    // 入口函数 - 可以被外部调用
    public entry fun say_hello() {
        // 打印问候语到调试输出
        debug::print(&GREETING);
    }
    
    // 公共查询函数 - 返回问候语
    public fun get_greeting(): vector<u8> {
        GREETING
    }
}
代码解析:
  1. module hello_move::hello:定义模块,hello_move来自Move.toml中的命名地址
  2. use std::debug:导入标准库的调试模块
  3. const GREETING:定义常量,b"..."表示字节字符串
  4. public entry fun:入口函数,可从外部交易调用
  5. public fun:公共函数,可被其他模块调用

编译、发布到Testnet

步骤一:编译检查
aptos move compile
✅ 成功输出:
INCLUDING DEPENDENCY AptosFramework
COMPILING Move modules...
Successfully compiled 1 modules
步骤二:发布到测试网
aptos move publish
系统会提示:
Enter your private key as a hex literal (0x...) [...]:
这里需要输入私钥(不是助记词!)。 如何获取私钥:
  1. 打开Petra钱包
  2. 点击右上角设置图标 → Developer Settings
  3. 点击”Show Private Key”
  4. 小心复制(以0x开头的一长串字符)
⚠️ 重要安全提醒:
  • 仅在测试网使用此私钥
  • 绝不分享给任何人
  • 练习结束后可创建新钱包
发布成功输出:
Transaction hash: 0x1234...abcd
Gas used: 1024
Success!
理解输出:
  • 交易哈希:这次发布的唯一ID,可以在浏览器查看详情
  • Gas用量:执行交易消耗的计算资源(测试网免费)

在Aptos Explorer上验证合约

让我们在区块链浏览器上查看刚刚发布的合约:
  1. 打开Aptos Explorerexplorer.aptoslabs.com
  2. 输入交易哈希:粘贴刚才得到的哈希值(0x1234…abcd格式)
  3. 查看交易详情
    • 状态:Success ✅
    • 发送者:你的钱包地址
    • Gas用量:1024
    • 时间戳:发布时间
  4. 点击”Module”标签:查看合约源代码
🎉 恭喜! 你的代码现在已经永久存储在Aptos测试网上(直到测试网重置)。

完整工作流:发布后立即调用

现在调用我们刚刚发布的函数:
# 调用say_hello函数
aptos move run \
  --function-id 'hello_move::hello::say_hello'

# 完整格式说明:
# --function-id '命名地址::模块名::函数名'
观察输出:
Transaction hash: 0x5678...efgh
Gas used: 42
Success!
等等,我们没看到”Hello, Aptos Move!”的输出? 这是因为debug::print只在特定模式下显示。查看完整输出:
# 添加--verbose参数查看详细输出
aptos move run \
  --function-id 'hello_move::hello::say_hello' \
  --verbose
现在你应该能看到:
[debug] Hello, Aptos Move!

实战练习:修改Hello World

现在,请尝试修改代码,完成以下练习: 基础任务:
  1. 修改GREETING常量为你自己的问候语
  2. 重新编译和发布
  3. 再次调用查看新输出
扩展挑战:
  1. 添加带参数的函数
    public entry fun greet(name: vector<u8>) {
        debug::print(&b"Hello, ");
        debug::print(&name);
        debug::print(&b"!");
    }
    
    调用命令:
    aptos move run \
      --function-id 'hello_move::hello::greet' \
      --args 'string:Alice'
    
  2. 创建返回值的函数
    public fun add(a: u64, b: u64): u64 {
        a + b
    }
    
遇到问题?检查清单:
  • 是否保存了文件?
  • 编译是否通过?aptos move compile
  • 是否使用正确的函数ID格式?
  • 钱包是否有足够的测试代币?

📝 本章总结

恭喜!你已经完成了: 理解核心理念:Aptos的并行性能和Move的资源模型
搭建完整环境:CLI + IDE + 钱包 + 测试代币
完成第一个合约:编写→编译→发布→调用完整流程
关键收获:
  1. Move将资产视为资源,这从根本上改变了智能合约的编写方式
  2. 开发环境一次性配置,后续可以专注于编码
  3. 完整的工作流:本地编码 → 链上部署 → 调用验证
记住这种感觉——从零到成功部署第一个合约的成就感。在接下来的章节中,我们将深入学习Move语言的各个部分,逐步构建更复杂的应用。 如果你卡在某个步骤,不要担心:
  1. 回顾本节的具体步骤
  2. 检查附录B的常见错误
  3. 在本书的GitHub仓库提交Issue
  4. 休息一下,明天再试
在下一章,我们将开始学习Move的基础语法——准备我们的”烹饪食材”。
👨‍🍳 厨师笔记:
我仍然记得自己第一次成功部署合约时的兴奋。那是一个简单的计数器合约,但看到它真的在区块链上运行,感觉就像魔法。记住这一刻——这是你成为Aptos Move开发者的起点。
环境配置可能是最繁琐的部分,但也是最重要的。就像厨师必须保持刀具锋利、灶台清洁一样,好的开发环境能让你事半功倍。如果今天只完成环境搭建,你已经成功了80%。
现在,休息一下,喝杯咖啡,准备进入第二章的学习。你已经迈出了最重要的一步! 🎉