node.js - 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 字节的值。看来我正在传递。
解决方案
从核心 Nethereum 开发人员那里反弹。他验证了用户数据是否存在,但这可能只是 Etherscan Web 客户端未对其进行解码的问题。所以用户数据应该是可访问的。
推荐阅读
- reactjs - 如何在画布上为 Path2D 对象设置动画
- flutter - setState 不适用于 Navigator.of(context)
- objective-c - 如何在 Objective-C 项目中领导安全区域?
- css - 使用css网格在移动视图中拉伸的图像
- javascript - express 中路由控制器模型的问题
- c# - 使用 WHERE NOT EXISTS (SELECT TOP 1 (id) FROM table WHERE aaa LIKE @aaa AND 不会返回没有 AND 的结果
- ios - 通过 UIStoryBoardSegue 发送位置名称变量未显示
- laravel - Laravel @include 带有来自函数的变量的视图
- express - Node Express JEST Supertest PUT 和 DELETE 端点返回 405“方法不允许”
- java - Postgresql 从具有引用的其他表中加载所有值