首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >0xPrice/Quote不能正确处理不同的令牌小数

问0xPrice/Quote不能正确处理不同的令牌小数
EN

Ethereum用户
提问于 2022-04-05 08:14:12
回答 1查看 114关注 0票数 0

我在我的项目中使用了0xPrice和Quote,并遇到了以下问题,这可能是API中的一个bug。

示例请求:https://api.0x.org/swap/v1/quote?sellToken=0x514cdb9cd8a2fb2bdcf7a3b8ddd098caf466e548&buyToken=0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce&sellAmount=91852168466729

象征性小数:

  • 0x514cdb9cd8a2fb2bdf7a3b8ddd098caf466e548有9个小数
  • 0x95ad61b0a150d79219dcf64e6cc01f0b64c4ce有18个小数

除其他外,答复包括下列价值:

  • buyAmount:"17621716298148718“
  • sellAmount:"91852168466729“
  • sellTokenToEthRate:"681573019064660.96173915“
  • buyTokenToEthRate:"131484453.43337870913186545“

sellAmount基于9个小数-> sellAmount / sellTokenToEthRate = 0.13476497146 ETH,这是正确的。

然而,buyAmount也是基于9个小数-> buyAmount / buyTokenToEthRate = 134141724.605,这是不正确的,9小数从正确的值。

这是个知道的问题还是我做错了什么?感谢你的帮助!

EN

回答 1

Ethereum用户

发布于 2022-04-07 13:28:04

作为临时解决办法,我使用一个乘数来计算buyAmount的eth值:

代码语言:javascript
复制
const sellTokenToBuyTokenDecimalMultiplier: BigDecimal = 
  new BigDecimal(`1e${sellTokenDecimals}`,)
    .divide(new BigDecimal(`1e${buyTokenDecimals}`), 19);

const buyValueInEth: BigDecimal = 
      new BigDecimal(buyAmount.toString())
        .divide(buyTokenToEthRate, 18)
        .multiply(sellTokenToBuyTokenDecimalMultiplier);

(提示: BigDecimal是https://www.npmjs.com/package/js-big-decimal)

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/125485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档