Binance Smart Chain safeTransferFrom 功能与转账评论不起作用

Posted

技术标签:

【中文标题】Binance Smart Chain safeTransferFrom 功能与转账评论不起作用【英文标题】:Binance Smart Chain safeTransferFrom function with transfer comments not working 【发布时间】:2021-09-22 14:51:57 【问题描述】:

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

我的合约支持标准的 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 字节的值。看来我正在传递。

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于Binance Smart Chain safeTransferFrom 功能与转账评论不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Binance Smart Chain - 将合约从测试网迁移到主网

BSC智能链主网节点搭建-2022最新详细版文档

二进制方式快速部署BSC主网v1.1.2

BSC 测试链配置

2021-08-20 Doge Smart Chain

Hoo Smart Chain激励计划加速「万物生长」