///! ACC-721中文标准测试 ///! 测试ACC-721 NFT协议的所有功能 使用 ../asset/acc721; 合约 ACC721测试 { 私有 nft: ACC721基础; 构造函数() { nft = ACC721基础::新建("测试NFT", "TNFT"); } // 测试1: 基本信息 函数 测试基本信息() { 要求(nft.名称() == "测试NFT", "名称错误"); 要求(nft.符号() == "TNFT", "符号错误"); } // 测试2: 铸造NFT 函数 测试铸造() { 让 接收者 = 消息::发送者(); 让 代币ID = 哈希::从十六进制("0x1234567890123456789012345678901234567890123456789012345678901234"); // 铸造前 要求(nft.总供应量() == 0, "初始供应量应为0"); // 执行铸造 nft.铸造(接收者, 代币ID); // 铸造后 要求(nft.总供应量() == 1, "供应量应为1"); 要求(nft.所有者(代币ID) == 接收者, "所有者错误"); 要求(nft.持有量(接收者) == 1, "持有量错误"); } // 测试3: 转移NFT 函数 测试转移() { 让 发送者 = 消息::发送者(); 让 接收者 = 地址::从十六进制("0x1234567890123456789012345678901234567890"); 让 代币ID = 哈希::从十六进制("0x1234567890123456789012345678901234567890123456789012345678901234"); // 先铸造 nft.铸造(发送者, 代币ID); // 转移前 让 发送者余额前 = nft.持有量(发送者); 让 接收者余额前 = nft.持有量(接收者); // 执行转移 nft.转移从(发送者, 接收者, 代币ID); // 转移后 要求(nft.所有者(代币ID) == 接收者, "所有者错误"); 要求(nft.持有量(发送者) == 发送者余额前 - 1, "发送者余额错误"); 要求(nft.持有量(接收者) == 接收者余额前 + 1, "接收者余额错误"); } // 测试4: 授权NFT 函数 测试授权() { 让 所有者 = 消息::发送者(); 让 授权者 = 地址::从十六进制("0x1234567890123456789012345678901234567890"); 让 代币ID = 哈希::从十六进制("0x1234567890123456789012345678901234567890123456789012345678901234"); // 先铸造 nft.铸造(所有者, 代币ID); // 执行授权 nft.授权(授权者, 代币ID); // 验证 要求(nft.获取授权(代币ID) == 授权者, "授权地址错误"); } // 测试5: 销毁NFT 函数 测试销毁() { 让 所有者 = 消息::发送者(); 让 代币ID = 哈希::从十六进制("0x1234567890123456789012345678901234567890123456789012345678901234"); // 先铸造 nft.铸造(所有者, 代币ID); // 销毁前 让 供应量前 = nft.总供应量(); 让 余额前 = nft.持有量(所有者); // 执行销毁 nft.销毁(代币ID); // 销毁后 要求(nft.总供应量() == 供应量前 - 1, "供应量错误"); 要求(nft.持有量(所有者) == 余额前 - 1, "余额错误"); 要求(nft.存在(代币ID) == 假, "NFT应该不存在"); } // 运行所有测试 函数 运行所有测试() { 测试基本信息(); 测试铸造(); 测试转移(); 测试授权(); 测试销毁(); } }