You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Suiscan无法执行entry函数:Sui Move NFT开发求助

问题

刚接触Sui Move,具备Python、NodeJS基础及少量Rust知识,尝试创建带有动态对象字段Image(存储图片URL)的NFT对象Hunter,代码如下:

module nft_tutorial::hunt;

use sui::url::{Self, Url};
use sui::dynamic_object_field as ofield;

public struct Hunter has key {
    id: UID,
}

public struct Image has key, store {
    id: UID,
    url: Url,
}

public entry fun create_hunter(ctx: &mut TxContext) {
    transfer::transfer(Hunter {
        id: object::new(ctx),
    }, tx_context::sender(ctx));
}

public entry fun create_image(url: vector<u8>, ctx: &mut TxContext) {
    transfer::transfer(Image {
        id: object::new(ctx),
        url: url::new_unsafe_from_bytes(url),
    }, tx_context::sender(ctx));
}

public entry fun add_image(hunter: &mut Hunter, image: Image) {
    ofield::add(&mut hunter.id, object::id(&image), image);
}

脚本发布正常,create_hunter与create_image两个entry函数可正常执行,并在SUI Explorer中生成对应对象。但执行add_image时,Suiscan界面的Arg0、Arg1输入框及Execute按钮均处于不可激活状态,无法执行该函数。请问是代码问题还是Suiscan特性导致?恳请提供解决建议。

注:测试时可使用任意图片URL。

原因与解决建议

这是代码问题导致的,Suiscan无法识别符合交互要求的函数签名,具体原因和修复方案如下:

  • 缺少TxContext参数:Sui Move中,涉及对象修改的entry函数必须传入&mut TxContext参数,用于链上验证调用者的权限。当前add_image函数没有该参数,Suiscan无法解析合法的调用逻辑,因此禁用了交互按钮。
  • 参数权限与传递逻辑:虽然image: Image的所有权传递逻辑本身没问题,但缺少上下文参数会导致前端无法识别参数的合法性,进而无法激活输入框。

修复后的add_image函数

public entry fun add_image(hunter: &mut Hunter, image: Image, ctx: &mut TxContext) {
    ofield::add(&mut hunter.id, object::id(&image), image);
}

额外优化建议

  • 给Hunter添加store能力,方便后续对象转移或扩展操作:
    public struct Hunter has key, store {
        id: UID,
    }
    
  • 替换url::new_unsafe_from_bytes为url::new,验证URL格式合法性,避免无效数据:
    public entry fun create_image(url: vector<u8>, ctx: &mut TxContext) {
        let url = url::new(url).unwrap_or_else(|_| abort(0x1)); // 自定义错误码标识无效URL
        transfer::transfer(Image {
            id: object::new(ctx),
            url,
        }, tx_context::sender(ctx));
    }
    

内容的提问来源于stack exchange,提问作者TheodorosNikoleris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 19:07:28