下面是薄荷ERC721令牌的合同代码:
contract NFT is ERC721URIStorage, Ownable {
mapping(uint256 => address) private _owners;
mapping(address => uint256) private _balances;
constructor()ERC721 ("Lambo", "LMB") public {}
function mintNFT(address to, uint256 tokenId, string memory tokenURI) public {
require(to != address(0), "ERC721: token mint to contract owner address");
require(!_exists(tokenId), "ERC721: token already minted");
_mint(to, tokenId);
_setTokenURI(tokenId, tokenURI);
}
function burnToken(uint256 tokenId) public {
_burn(tokenId);
}
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for zero address");
return _balances[owner];
}
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
return owner;
}
}为薄荷ERC721令牌编写测试,并验证造币地址是否拥有令牌:
const firstMinter = accounts[4]; //0xD235287FcBE172407F5692Bc25cD73989a7d6777
it("Minting ERC721 Tokens", async() => {
let nftInstance = await mintNFTs.deployed();
await nftInstance.mintNFT(firstMinter, 1, "ipfs://QmQZTUekV9P7cKRiVVwdahyaFNZEt6Yt7fGtcRfsLSWpyP/evocube.json");
console.log("ERC721 Tokens have been minted for whitelist")
})
it("Verifying Whitelist Owners have ERC721 Tokens", async() => {
const nftInstance = await mintNFTs.deployed();
let firstOwner = await nftInstance.ownerOf(1);
console.log(firstOwner);
assert.equal(firstMinter, firstOwner, "Error: First Minter doesn't own the token");
})以下是我所收到的测试结果:
AssertionError: Error: First不拥有令牌:预期'0xD235287FcBE172407F5692Bc25cD73989a7d6777‘等于’0x00000000000000000000000000000000000000000‘。
发布于 2022-04-20 16:38:10
我认为您的问题在于,firstMinter在部署tokenID 1之前还没有拥有NFT,所以firstOwner是空的。
assert.equal(firstMinter, firstOwner, "Error: First Minter doesn't own the token");https://ethereum.stackexchange.com/questions/126573
复制相似问题