UNPKG

2.17 kBJavaScriptView Raw
1const lodash = require('lodash');
2const BigNumber = require('bignumber.js');
3const parse = require('./parser');
4
5const { Hex, TxHash, Hex32, Address, EpochNumber, BlockHash } = require('./type');
6
7parse.undefined = parse(undefined);
8parse.null = parse(null);
9parse.boolean = parse(v => Boolean(Number(v))).validate(lodash.isBoolean);
10parse.number = parse(Number).validate(Number.isFinite);
11parse.bigNumber = parse(BigNumber).validate(BigNumber.isBigNumber).validate(v => v.isFinite());
12
13parse.transaction = parse({
14 nonce: parse.number,
15 value: parse.bigNumber,
16 gasPrice: parse.bigNumber,
17 gas: parse.bigNumber,
18 v: parse.number,
19 transactionIndex: (parse.null).or(parse.number),
20 status: (parse.null).or(parse.number), // XXX: might be remove in rpc returned
21});
22
23parse.block = parse({
24 epochNumber: parse.number,
25 height: parse.number,
26 size: parse.number,
27 timestamp: parse.number,
28 gasLimit: parse.bigNumber,
29 difficulty: parse.bigNumber,
30 transactions: [(parse.transaction).or(TxHash)],
31 stable: (parse.null).or(parse.boolean),
32});
33
34parse.receipt = parse({
35 index: parse.number, // XXX: number already in rpc return
36 epochNumber: parse.number, // XXX: number already in rpc return
37 outcomeStatus: parse.number, // XXX: number already in rpc return
38 gasUsed: parse.bigNumber,
39 logs: [
40 {
41 // FIXME: getTransactionReceipt returned log.data is array of number
42 data: data => (Array.isArray(data) ? Hex(Buffer.from(data)) : data),
43 },
44 ],
45});
46
47parse.logs = parse([
48 {
49 epochNumber: parse.number,
50 logIndex: parse.number,
51 transactionIndex: parse.number,
52 transactionLogIndex: parse.number,
53 },
54]);
55
56// ----------------------------------------------------------------------------
57parse.getLogs = parse({
58 limit: parse(Hex.fromNumber).or(undefined),
59 fromEpoch: parse(EpochNumber).or(undefined),
60 toEpoch: parse(EpochNumber).or(undefined),
61 blockHashes: parse([BlockHash]).or(BlockHash).or(undefined),
62 address: parse([Address]).or(Address).or(undefined),
63 topics: parse([parse([Hex32]).or(Hex32).or(null)]).or(undefined),
64});
65
66module.exports = parse;