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

如何编写Solidity中带数组参数的批量铸造NFT测试脚本?

问题:Solidity批量铸造NFT测试脚本数组传参报错

我写了一个Solidity智能合约的batchMintUniqueNFT函数,但不知道怎么编写测试脚本传递数组参数,运行测试时系统提示"undeclared identifier names, uris, description"错误。

智能合约代码

function batchMintUniqueNFT(
        string[] memory _names,
        string[] memory _descriptions,
        string[] memory _images
    ) external onlyOwner{
        if(_names.length != _descriptions.length  
            || _descriptions.length != _images.length 
            || _images.length != _names.length
        ){
            revert UnbalancedMetadataLength(_names.length, _descriptions.length, _images.length);
        }

        uint256 amount = _names.length;
        if(amount == 0){
            revert InsuficientAmount(amount);
        }

        uint256 startTokenID = _nextTokenId();
        _mint(msg.sender, amount);
        for(uint256 i = 0; i < amount; i++){
            uint256 tokenID = startTokenID + i;
            string memory metadata = GenerateMetadata(_names[i], _descriptions[i], _images[i]);
            tokenURIs[tokenID] = metadata;

            emit MintingSuccess(msg.sender, tokenID, metadata);
        }
        successMinted += amount;
    }

我尝试的错误测试代码

function testbatchmintunique() external {
        string ;
        string ;
        string ;

        names[0] = "keren 1"; descriptions[0] = "deskripsi 1"; uris[0] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";
        names[1] = "keren 2"; descriptions[1] = "deskripsi 2"; uris[1] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";
        names[2] = "keren 3"; descriptions[2] = "deskripsi 3"; uris[2] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";
        names[3] = "keren 4"; descriptions[3] = "deskripsi 4"; uris[3] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";
        names[4] = "keren 5"; descriptions[4] = "deskripsi 5"; uris[4] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";
        names[5] = "keren 6"; descriptions[5] = "deskripsi 6"; uris[5] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";
        names[6] = "keren 7"; descriptions[6] = "deskripsi 7"; uris[6] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";
        names[7] = "keren 8"; descriptions[7] = "deskripsi 8"; uris[7] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";
        names[8] = "keren 9"; descriptions[8] = "deskripsi 9"; uris[8] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";
        names[9] = "keren 10"; descriptions[9] = "deskripsi 10"; uris[9] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";

        ketewelnft.batchMintUniqueNFT(names, descriptions, uris);
    }

解决方法

错误根源

测试代码里的names、descriptions、uris变量没有正确声明数组类型,也没有初始化数组长度,直接赋值自然会触发未定义标识符的错误。

修复方案1:先声明并初始化数组再赋值

function testbatchmintunique() external {
    // 声明长度为10的字符串数组并初始化
    string[] memory names = new string[](10);
    string[] memory descriptions = new string[](10);
    string[] memory uris = new string[](10);

    // 逐个赋值数组元素
    names[0] = "keren 1"; descriptions[0] = "deskripsi 1"; uris[0] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";
    names[1] = "keren 2"; descriptions[1] = "deskripsi 2"; uris[1] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";
    names[2] = "keren 3"; descriptions[2] = "deskripsi 3"; uris[2] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";
    names[3] = "keren 4"; descriptions[3] = "deskripsi 4"; uris[3] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";
    names[4] = "keren 5"; descriptions[4] = "deskripsi 5"; uris[4] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";
    names[5] = "keren 6"; descriptions[5] = "deskripsi 6"; uris[5] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";
    names[6] = "keren 7"; descriptions[6] = "deskripsi 7"; uris[6] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";
    names[7] = "keren 8"; descriptions[7] = "deskripsi 8"; uris[7] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";
    names[8] = "keren 9"; descriptions[8] = "deskripsi 9"; uris[8] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";
    names[9] = "keren 10"; descriptions[9] = "deskripsi 10"; uris[9] = "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha";

    // 调用合约函数,注意第三个参数对应合约的_images
    ketewelnft.batchMintUniqueNFT(names, descriptions, uris);
}

修复方案2:直接使用数组字面量传参(更简洁)

function testbatchmintunique() external {
    ketewelnft.batchMintUniqueNFT(
        // 第一个参数:names数组
        ["keren 1", "keren 2", "keren 3", "keren 4", "keren 5", "keren 6", "keren 7", "keren 8", "keren 9", "keren 10"],
        // 第二个参数:descriptions数组
        ["deskripsi 1", "deskripsi 2", "deskripsi 3", "deskripsi 4", "deskripsi 5", "deskripsi 6", "deskripsi 7", "deskripsi 8", "deskripsi 9", "deskripsi 10"],
        // 第三个参数:images数组(对应合约的_images)
        [
            "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha",
            "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha",
            "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha",
            "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha",
            "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha",
            "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha",
            "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha",
            "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha",
            "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha",
            "https://ipfs.io/ipfs/bafkreihqaswfkli5plhmicnmqq6zqgci32tk26jxk7lix42ktkowc62cha"
        ]
    );
}

额外注意事项

  1. 确保测试调用者是合约的owner,否则会触发onlyOwner修饰符的权限检查失败。
  2. 三个数组的长度必须一致,否则合约会触发UnbalancedMetadataLength回滚。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:07:02