标签: erc721

为什么以及何时调用 setApprovalForAll?

我很难理解为什么以及何时在 NFT 生成合约上调用 SetApprovalForAll。

酷猫为例。为了方便起见,下面有相关交易的屏幕截图。

我注意到,对于此合同和其他合同,反复调用“Set Approval For All”。根据我自己对允许铸造的合约的有限经验,via _safeMint,我也在日志中看到了 SetApprovalForAll 交易。它没有在我的代码中直接调用。

为什么这么称呼它?钱包是否将其作为铸造过程的一部分?

在此输入图像描述

ethereum solidity openzeppelin nft erc721

10
推荐指数
1
解决办法
1万
查看次数

设置令牌 URI 函数

我了解到 setTokenURI 函数不再使用。如何更改我想要创建的 NFT 代币的代币 URI?现在我的智能合约中的 createCollectible 函数如下所示:

function createCollectible(string memory tokenURI)
    public
    returns (uint256)
{
    uint256 newItemId = tokenId;
    _safeMint(msg.sender, newItemId);
    _setTokenURI(newItemId, tokenURI);
    tokenId = tokenId + 1;
    return newItemId;
}
Run Code Online (Sandbox Code Playgroud)

ethereum solidity smartcontracts nft erc721

4
推荐指数
1
解决办法
5617
查看次数

如何使用web3j通过交易获取合约?

我需要检查一笔交易是否是 ERC721/ERC1155 交易,并获取接收地址、代币地址、价值等信息。如果我理解正确,我必须加载该交易的合约并检查它是否继承 ERC165,以便确认这是一笔ERC721/ERC1155交易。

问题:我不明白如何获得具有交易对象的合同。我还没有找到获取令牌地址的方法。

我在 Infura 上有一个以太坊节点,我从那里读取区块并迭代交易。我收到一笔交易及其收据。我的代码如下所示:

var tr = web3j.ethGetTransactionByBlockNumberAndIndex(blockIdParam, transactionIndex).sendAsync().get();
var hash = tr.getTransaction().get().getHash();
var receipt = web3.ethGetTransactionReceipt(hash).send().getTransactionReceipt();
Run Code Online (Sandbox Code Playgroud)

现在我正在努力阅读事务日志,检查它们的主题并验证它们是否包含Transfer事件。但是转账事件也是由ERC20交易发出的,所以我在这里有点困惑。

java ethereum web3-java erc721

1
推荐指数
1
解决办法
1699
查看次数