如何处理返回具有 BigInt 和字符串数据类型的 Javascript 对象的 getPastEvent 输出?

问题描述 投票:0回答:1

我正在编写一个脚本,使用 web3 从以太坊区块链中提取所有过去的事件并将它们放入我的 redux 存储中。代码片段如下

  const tradeStream = await exchange.getPastEvents('Trade', {
    fromBlock: 0,
    toBlock: 'latest',
  });
  const filledOrders = tradeStream.map((event) => event.returnValues);
  // Add filled orders to the redux store
  dispatch(filledOrdersLoaded(filledOrders));

现在我想访问我的商店并获取已填写的订单。但是,我意识到数据位于具有 BigInt 和字符串数据类型的 javascript 对象中。

我的 console.log(filledOrders) 的示例是下面的 Javascript 对象

filled orders are(6)[{…}, {…}, {…}, {…},
{…}, {…}]
0: 0: 2n
1: "0xf4C5cd4FB2d88a496A099a07c15DdF9EDEa3E236"
2: "0x62c79a15418dc61dd64E0dfDE460Dc36fB868124"
3: 100000000000000000000n
4: "0x0000000000000000000000000000000000000000"
5: 100000000000000000n
6: "0x84eE009dFe0843997DBE0bC86F79527025635688"
7: 1699583670n
amountGet: 100000000000000000000n
amountGive: 100000000000000000n
id: 2n
timestamp: 1699583670n
tokenGet:
  "0x62c79a15418dc61dd64E0dfDE460Dc36fB868124"
tokenGive:
  "0x0000000000000000000000000000000000000000"
user:
  "0xf4C5cd4FB2d88a496A099a07c15DdF9EDEa3E236"
userFill:
  "0x84eE009dFe0843997DBE0bC86F79527025635688"
__length__: 8

在我的createSelector代码(用于访问商店中的数据)中,我想按时间戳对filledOrders进行排序。但是我会得到一个 TypeError:无法将 BigInt 值转换为数字。那么提取数据并进行排序的最佳方法是什么?

const filledOrders = (state) => get(state, 'exchange.filledOrders.data', []);
export const filledOrdersSelector = createSelector(filledOrders, (orders) => {
  // Sort orders by date ascending for price comparison
  orders = orders.sort((a, b) => a.timestamp - b.timestamp);
  console.log('filled orders are', orders);

  return orders;
});
javascript web3js bigint
1个回答
0
投票

我需要对 BigInt 进行一些操作才能让它进行排序

orders = orders.sort(
    (a, b) =>
      Date(Number(a.timestamp) * 1000) - Date(Number(b.timestamp) * 1000),
  );
© www.soinside.com 2019 - 2024. All rights reserved.