首页 > 解决方案 > Binance Smart Chain safeTransferFrom 功能与转账评论不起作用

问题描述

我已经在 BSC 的测试网上成功部署并验证了 ERC721 智能合约。还成功铸造并授予了新的 ERC721 代币。接下来是在钱包之间转移代币。到目前为止一切顺利,除了我想在转移交易中添加转移评论。

我的合约支持标准的 safeTransferFrom(senderWaller, receiverWallet, tokenId, data) 函数,我可以看到数据(即转账评论)正在发送出去。但是当我在 BSC 测试网浏览器中查看成功的交易时,它并没有出现。

这是一个示例交易 --> https://testnet.bscscan.com/tx/0x1f3bf69da66cff66bbeeb6ce6f7505be8a78729685162811cb29c9dc30a347d6。在 BSC 测试网浏览器中解码数据,我可以看到十六进制形式的尾随数据,当我将其转换回可读文本时,它会转换回可读文本。请参阅下面以 205363... 开头的尾随值。这是十六进制转换回预期文本值的屏幕截图。

在此处输入图像描述

Function: safeTransferFrom(address from, address to, uint256 tokenId, bytes _data)

MethodID: 0xb88d4fde
[0]:  0000000000000000000000008175f3b00af0b775136b918a78298aaf4e1ea137
[1]:  000000000000000000000000ba3662af7c0cecd20cd97ef8072c30f4449b16b1
[2]:  0000000000000000000000000000000000000000000000000000000000000005
[3]:  0000000000000000000000000000000000000000000000000000000000000080
[4]:  0000000000000000000000000000000000000000000000000000000000000020
[5]:  5363686564756c656420736572766963696e6700000000000000000000000000

这是我用于编码 web3 方法调用的代码。

const soygaToken = new web3.eth.Contract(soygaABI, contractAddress);
var byteComments = Buffer.from(comments.padEnd(32, "\0"), 'utf-8');
var myData = soygaToken.methods.safeTransferFrom(senderAddress, recipientAddress, tokenId, byteComments).encodeABI();

当我查看 BSC 测试网浏览器时,关于是什么导致交易中缺少这些数据的任何想法?查看 ERC721 规范 ( https://ethereum.org/en/developers/docs/standards/tokens/erc-721/ ) 数据参数应该是一个 32 字节的值。看来我正在传递。

标签: node.jsethereumweb3

解决方案


从核心 Nethereum 开发人员那里反弹。他验证了用户数据是否存在,但这可能只是 Etherscan Web 客户端未对其进行解码的问题。所以用户数据应该是可访问的。


推荐阅读