This repository has been archived by the owner on Jun 11, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathtransfer.js
89 lines (73 loc) · 2.67 KB
/
transfer.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
/*
* LiskHQ/lisk-service
* Copyright © 2022 Lisk Foundation
*
* See the LICENSE file at the top-level directory of this distribution
* for licensing information.
*
* Unless otherwise agreed in a custom licensing agreement with the Lisk Foundation,
* no part of this software, including this file, may be copied, modified,
* propagated, or distributed except according to the terms contained in the
* LICENSE file.
*
* Removal or modification of this copyright notice is prohibited.
*
*/
const {
Logger,
DB: {
MySQL: { getTableInstance },
},
} = require('lisk-service-framework');
const config = require('../../../../config');
const { TRANSACTION_STATUS } = require('../../../constants');
const { indexAccountAddress } = require('../../accountIndex');
const { requestConnector } = require('../../../utils/request');
const logger = Logger();
const MYSQL_ENDPOINT = config.endpoints.mysql;
const transactionsTableSchema = require('../../../database/schema/transactions');
const getTransactionsTable = () => getTableInstance(transactionsTableSchema, MYSQL_ENDPOINT);
// Command specific constants
const COMMAND_NAME = 'transfer';
const EVENT_NAME_INITIALIZE_USER_ACCOUNT = 'initializeUserAccount';
// eslint-disable-next-line no-unused-vars
const applyTransaction = async (blockHeader, tx, events, dbTrx) => {
logger.trace(
`Updating index for the account with address ${tx.params.recipientAddress} asynchronously.`,
);
indexAccountAddress(tx.params.recipientAddress);
if (tx.executionStatus !== TRANSACTION_STATUS.SUCCESSFUL) return;
tx = {
...tx,
...tx.params,
};
const filterInitializeUserAccountEvent = events.find(
event =>
event.name === EVENT_NAME_INITIALIZE_USER_ACCOUNT &&
event.data.address === tx.params.recipientAddress &&
event.topics.includes(tx.id),
);
if (filterInitializeUserAccountEvent) {
const formattedTransaction = await requestConnector('formatTransaction', {
transaction: tx,
additionalFee: filterInitializeUserAccountEvent.data.initializationFee,
});
tx.minFee = formattedTransaction.minFee;
}
const transactionsTable = await getTransactionsTable();
logger.trace(`Indexing transaction ${tx.id} contained in block at height ${tx.height}.`);
await transactionsTable.upsert(tx, dbTrx);
logger.debug(`Indexed transaction ${tx.id} contained in block at height ${tx.height}.`);
};
// eslint-disable-next-line no-unused-vars
const revertTransaction = async (blockHeader, tx, events, dbTrx) => {
logger.trace(
`Updating index for the account with address ${tx.params.recipientAddress} asynchronously.`,
);
indexAccountAddress(tx.params.recipientAddress);
};
module.exports = {
COMMAND_NAME,
applyTransaction,
revertTransaction,
};