新手问一个从节点请求代币名字的问题

我想从链上获取ERC20代币的名称 BSC主网,用的web3.js,代码如下

const Web3 = require('web3');
const web3 = new Web3('`https://bsc-dataseed1.binance.org:443`');
//一个请求代币名称的请求
web3.eth.call({
    to: "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c",
    data: "0x06fdde03"
}).then(res => {
    console.log(res) 
})

请求回来的数据是这个(为了方便描述后面的问题,我把最后64位数据加粗了) 0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b5772617070656420424e42000000000000000000000000000000000000000000

如果把整段返回值放入web3.utils.hexToUtf8()再赋予对象的话,打印出来的会乱码

let coin = { name: web3.utils.hexToUtf8(res) }
console.log(coin);
//{
// name:'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0BWrapped BNB'
//}

如果只取最后64位(也就是上面加粗那段),那就会正常显示

let coin = { name: web3.utils.hexToUtf8(res) }
console.log(coin);
//{
// name:'Wrapped BNB'
//}

如果我想取代币名字的话,我可以只取返回值的最后64位吗?前面的那128位数据(没加粗那段)代表什么意思?有的币前面128位的返回值好像还会不太一样。

新手,刚注册的,第一次发帖,先谢谢大家。

请先 登录 后评论

最佳答案 2021-07-16 00:01

\x00 输出并不是乱码,这是是十六进制表示, 值为0, 根据 https://donsnotes.com/tech/charsets/ascii.html 它就是空字符。

其实更好的方法式使用web3.js 包装的调用合约的方法呀。

请先 登录 后评论

其它 0 个回答

  • 0 关注
  • 0 收藏,2543 浏览
  • 菜鸡 提出于 2021-07-14 05:20