我正在编写一个脚本,使用 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;
});
我需要对 BigInt 进行一些操作才能让它进行排序
orders = orders.sort(
(a, b) =>
Date(Number(a.timestamp) * 1000) - Date(Number(b.timestamp) * 1000),
);