IOTA 学习笔记(九):最小 Counter 合约在 Localnet 上的完整演示

IOTA 学习笔记(九):最小 Counter 合约在 Localnet 上的完整演示 上一期我们介绍了如何在本地启动 IOTA Localnet并通过 CLI 进行网络、地址、对象和交易管理。掌握了 Localnet 的使用后我们可以结合 Move 合约和对象模型做一个完整的实验——在本地部署和测试最小 Counter 合约。这一期我们将展示整个流程包括Move package 构建和发布Counter 对象创建调用 increment 函数修改对象查询对象状态和版本1. 准备 Counter Move 合约最小 Counter 合约示例module hello::counter { use iota::object::{Self, UID}; use iota::transfer; use iota::tx_context::{Self, TxContext}; public struct Counter has key { id: UID, value: u64, } public entry fun create(ctx: mut TxContext) { let counter Counter { id: object::new(ctx), value: 0, }; transfer::transfer(counter, tx_context::sender(ctx)); } public entry fun increment(counter: mut Counter) { counter.value counter.value 1; } public fun value(counter: Counter): u64 { counter.value } }Counter has key允许 Counter 成为链上对象id: UID对象唯一标识create创建对象并分配给交易发送者increment修改对象 valuevalue读取对象 value将该模块保存到counter.move文件中放在 Move package 的sources/目录下。2. 构建和发布 Package在 package 根目录执行构建命令move build成功后通过 CLI 发布 packageiota move publish --path ./ --signer SIGNER--path ./Move package 路径SIGNER交易发送者地址或私钥发布成功后会生成 Package ID例如Package ID: 0xabc123...这个 ID 后续用于函数调用。3. 创建 Counter 对象通过 CLI 调用create函数iota move call --package 0xabc123 --module counter --function create执行成功后会在本地链上生成一个 Counter 对象并将其所有权分配给当前交易发送者。查询对象列表或特定对象iota object list iota object get OBJECT_ID输出示例Object ID: 0xdef456... Type: Counter Owner: iota1q... Version: 1 value: 0Version: 1 表示对象的初始版本value: 0 初始计数值4. 调用 increment 函数修改对象将 Counter 对象传入increment函数iota move call --package 0xabc123 --module counter --function increment --args OBJECT_ID执行后Counter 对象 value 加 1同时版本号增加Object ID: 0xdef456... Version: 2 value: 1可以重复调用多次每次 version 1value 累加。5. 查询 Counter 当前状态通过 CLI 查询对象状态iota object get OBJECT_ID输出显示Object ID当前 OwnerVersionDatavaluePrevious Transaction例如Object ID: 0xdef456... Type: Counter Owner: iota1q... Version: 3 value: 2 Previous Transaction: 0x123abc...每次调用 increment 都会生成新的版本Previous Transaction 记录上一次操作。6. 交易与对象版本关系每次交易修改对象时交易读取旧版本对象执行 Move 函数逻辑创建对象新版本更新对象状态在链上CLI 查询显示 Version 增加Previous Transaction 更新这清楚反映了对象模型和交易的关联。7. 小结通过本地 Localnet 和 CLI我们完成了一个最小 Counter 合约的完整实验流程构建并发布 Move package调用 create 创建对象调用 increment 修改对象查询对象状态和版本这一流程展示了Move 合约如何创建和操作对象CLI 如何提交交易并查看结果对象模型如何通过 version 和 Previous Transaction 追踪状态变化掌握这一流程后就可以进一步实验共享对象、Coin 对象、Package 升级和更复杂的 Move 合约逻辑。下一期我们将讲共享对象与多用户交互实验演示多个用户如何在 Localnet 中操作同一个共享对象并观察共识排序和对象版本变化。