1 | const lodash = require('lodash');
|
2 | const BigNumber = require('bignumber.js');
|
3 | const parse = require('./parser');
|
4 |
|
5 | const { Hex, TxHash, Hex32, Address, EpochNumber, BlockHash } = require('./type');
|
6 |
|
7 | parse.undefined = parse(undefined);
|
8 | parse.null = parse(null);
|
9 | parse.boolean = parse(v => Boolean(Number(v))).validate(lodash.isBoolean);
|
10 | parse.number = parse(Number).validate(Number.isFinite);
|
11 | parse.bigNumber = parse(BigNumber).validate(BigNumber.isBigNumber).validate(v => v.isFinite());
|
12 |
|
13 | parse.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),
|
21 | });
|
22 |
|
23 | parse.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 |
|
34 | parse.receipt = parse({
|
35 | index: parse.number,
|
36 | epochNumber: parse.number,
|
37 | outcomeStatus: parse.number,
|
38 | gasUsed: parse.bigNumber,
|
39 | logs: [
|
40 | {
|
41 |
|
42 | data: data => (Array.isArray(data) ? Hex(Buffer.from(data)) : data),
|
43 | },
|
44 | ],
|
45 | });
|
46 |
|
47 | parse.logs = parse([
|
48 | {
|
49 | epochNumber: parse.number,
|
50 | logIndex: parse.number,
|
51 | transactionIndex: parse.number,
|
52 | transactionLogIndex: parse.number,
|
53 | },
|
54 | ]);
|
55 |
|
56 |
|
57 | parse.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 |
|
66 | module.exports = parse;
|