public void NftBurn() { var owner = KeyPair.Generate(); var simulator = new ChainSimulator(owner, 1234); var nexus = simulator.Nexus; var chain = nexus.RootChain; var symbol = "COOL"; var testUser = KeyPair.Generate(); // Create the token CoolToken as an NFT simulator.BeginBlock(); simulator.GenerateToken(owner, symbol, "CoolToken", 0, 0, Blockchain.Tokens.TokenFlags.None); simulator.EndBlock(); // Send some SOUL to the test user (required for gas used in "burn" transaction) simulator.BeginBlock(); simulator.GenerateTransfer(owner, testUser.Address, chain, Nexus.FuelTokenSymbol, UnitConversion.ToBigInteger(1, Nexus.FuelTokenDecimals)); simulator.EndBlock(); var token = simulator.Nexus.GetTokenInfo(symbol); var tokenData = new byte[] { 0x1, 0x3, 0x3, 0x7 }; Assert.IsTrue(nexus.TokenExists(symbol), "Can't find the token symbol"); // verify nft presence on the user pre-mint var ownedTokenList = chain.GetTokenOwnerships(symbol).Get(chain.Storage, testUser.Address); Assert.IsTrue(!ownedTokenList.Any(), "How does the user already have a CoolToken?"); // Mint a new CoolToken directly on the user simulator.BeginBlock(); simulator.GenerateNft(owner, testUser.Address, chain, symbol, tokenData, new byte[0]); simulator.EndBlock(); // verify nft presence on the user post-mint ownedTokenList = chain.GetTokenOwnerships(symbol).Get(chain.Storage, testUser.Address); Assert.IsTrue(ownedTokenList.Count() == 1, "How does the user not have one now?"); //verify that the present nft is the same we actually tried to create var tokenId = ownedTokenList.ElementAt(0); var nft = nexus.GetNFT(symbol, tokenId); Assert.IsTrue(nft.ROM.SequenceEqual(tokenData) || nft.RAM.SequenceEqual(tokenData), "And why is this NFT different than expected? Not the same data"); // burn the token simulator.BeginBlock(); simulator.GenerateNftBurn(testUser, chain, symbol, tokenId); simulator.EndBlock(); //verify the user no longer has the token ownedTokenList = chain.GetTokenOwnerships(symbol).Get(chain.Storage, testUser.Address); Assert.IsTrue(!ownedTokenList.Any(), "How does the user still have it post-burn?"); }