JavaScript 和大数,计算储备数据erc20和bep20

JavaScript and big numbers, calculating reserve data erc20 and bep20

我搜索了一整天,仍然没有解决方案。 我的问题是我正在使用 JavaScript 获取 EVM 区块链数据,但我使用的任何库都无法正常工作。

// pair
// 0 = BMON
// 1 = BUSD

// transaction
const tx0 = 2755738843649989653057n; // amount0Out BMON
const tx1 = 113747760332474227520n; // amount1In BUSD

// reserve after transaction
const x = 466822693713887341798087n; // reserve0 BMON
const y = 19334468154310748213608n; // reserve1 BUSD
const k = x * y;
console.log(k)

const newX = x + tx0;
const newY = y - tx1;
const newK = newX * newY;
console.log(newK)

在 Uniswap 中,价格基于准备金。我从 Swap 事件中获取数据进出的内容和数量。

为了测试我的计算是否 100% 准确,我制作了上面的小脚本。

我在交易后得到储备数据,但我需要知道交易前的价格。我减去输入的内容并添加输出的内容以创建新的储备。储备常数必须始终相同。当我执行 add/subtract 时,我的代码知道交易后的储备金和交易前的储备金,但不知何故,常量与应有的不一样。

我尝试了 bigInt、BigNumber.js、普通数字等。没有任何效果。我需要它 100% 准确地工作。

有没有人可以帮助我?

调用Number.MAX_SAFE_INTEGER你会找到最大安全整数值。如果你超出这个范围,数学就会变得棘手,你可能不会对结果满意。

你的数学必须保持在最大安全整数范围内才能取得好成绩。

在此处阅读更多内容:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER

您可以探索 BigInt,但它有自己的警告,就像浮点数一样。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt

在此处阅读更多内容:https://www.smashingmagazine.com/2019/07/essential-guide-javascript-newest-data-type-bigint/#the-problem

如果觉得有用,请考虑upvoting/accepting