-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathabstract.js
104 lines (90 loc) · 3.75 KB
/
abstract.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
const { getFirehoseHeavyProof, preprocessFirehoseBlock, convertFirehoseAction, getFirehoseIrreversibleBlock } = require("./firehoseFunctions");
const { getShipIrreversibleBlock, getShipHeavyProof } = require("./shipFunctions");
const { getNodeosIrreversibleBlock, getNodeoseHeavyProof, convertNodeosAction, formatBlockRes } = require("./nodeosFunctions");
const { getReceiptDigest } = require("./ibcFunctions")
const historyProvider = process.env.HISTORY_PROVIDER;
const axios = require('axios');
//Functions that abstract the history provider
const getIrreversibleBlock = async (block_num) => {
if (historyProvider === 'firehose') return getFirehoseIrreversibleBlock(block_num)
else if (historyProvider === 'ship') return getShipIrreversibleBlock(block_num);
else if (historyProvider === 'greymass') return getNodeosIrreversibleBlock(block_num);
}
const preprocessBlock = (obj, keepTraces) => {
if (historyProvider === 'firehose') return preprocessFirehoseBlock(obj, keepTraces);
else if (historyProvider === 'ship') return obj
else if (historyProvider === 'greymass') return formatBlockRes(obj)
}
const convertAction = (act, block_num) => {
if (historyProvider === 'firehose') return convertFirehoseAction(act);
else if (historyProvider === 'ship') return act
else if (historyProvider === 'greymass') return convertNodeosAction(act, block_num)
}
const getHeavyProof =async req => {
if (historyProvider === 'firehose') return getFirehoseHeavyProof(req);
else if (historyProvider === 'ship')return getShipHeavyProof(req);
else if (historyProvider === 'greymass'){
const transactions = await getTxs(req.block_num+1); //since request includes previous block
return getNodeoseHeavyProof(req, transactions);
}
}
const getTxs = async res =>{
if (historyProvider === 'firehose') {
let txs = res.block.unfilteredTransactionTraces.map(r=> r.actionTraces );
for (var tx of txs){
for (var act of tx){
const converted = await convertAction(act);
let action_receipt_digest = getReceiptDigest(converted.receipt);
act.action = converted.action;
act.receipt = converted.receipt;
act.action_receipt_digest = action_receipt_digest;
}
}
return txs;
}
else if (historyProvider === 'ship') {
let txs = [];
for (var tx of res.transactions){
let traces = [];
for (var act of tx.action_traces){
let action_receipt_digest = getReceiptDigest(act.receipt);
const converted = convertAction(act);
act.action = JSON.parse(JSON.stringify(act.act));
act.receipt = converted.receipt;
act.action_receipt_digest = action_receipt_digest;
act.transactionId = tx.id;
delete act.act
traces.push(act)
}
//sort traces by global sequence since SHIP doesnt sort them
traces.sort((a,b)=> a.receipt.global_sequence > b.receipt.global_sequence? 1 :-1);
txs.push(traces)
}
return txs;
}
else if (historyProvider === 'greymass') {
const newRes = await axios(`${process.env.NODEOS_HTTP}/v1/history/get_raw_actions_in_block?block_num=${res.block_num || res}`);
let txs =[];
for (var action of newRes.data.actions){
const converted = await convertAction(action, res.block_num || res);
let action_receipt_digest = await getReceiptDigest(converted.receipt);
let obj = {
action_receipt_digest,
transactionId: converted.action.transactionId,
receipt: converted.receipt,
action: {name: action.act.name}
}
let tx = txs.find(r=> r && r.find(s=>s.transactionId === obj.transactionId));
if (!tx) txs.push([obj]);
else tx.push(obj)
}
return txs;
}
}
module.exports = {
getIrreversibleBlock,
preprocessBlock,
convertAction,
getHeavyProof,
getTxs
}