-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
172 lines (156 loc) · 6.18 KB
/
app.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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
const express = require('express');
const app = express();
const mongoose = require('mongoose');
const cors = require('cors');
const bodyParser = require('body-parser');
const morgan = require('morgan');
const Web3 = require('web3');
const Event = require('./models/Event.js');
const utility = require('./utility');
const Order = require('./models/Order.js');
const config = require('./config');
const path = require('path');
const session = require('express-session');
const cookieParser = require('cookie-parser');
const web3 = new Web3(config.ethRPC);
const fs = require('fs');
const privateKey = fs.readFileSync('/etc/letsencrypt/live/api.fasbit.com/privkey.pem', 'utf8');
const certificate = fs.readFileSync('/etc/letsencrypt/live/api.fasbit.com/cert.pem', 'utf8');
const ca = fs.readFileSync('/etc/letsencrypt/live/api.fasbit.com/chain.pem', 'utf8');
const credentials = {
key: privateKey,
cert: certificate,
ca:ca
};
const https = require('https');
app.use(session({
secret: config.sessionSecret,
resave: false,
saveUninitialized: true
}))
app.use(cors());
app.use(express.json()); // for parsing application/json
app.use(express.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
mongoose.Promise = global.Promise;
//configure morgan to log every api call on server
app.use(morgan(':method :url :status :res[content-length] - :response-time ms :date[clf]'));
// const exchangeContractAbi = web3.eth.contract(config.dExContractABI);
// const exchangeContract = exchangeContractAbi.at(config.contractDExAddrs[0].addr);
const exchangeContract = new web3.eth.Contract(config.dExContractABI, config.contractDExAddrs[0].addr);
const exchangeContractEvents = exchangeContract.events;
//Mongoose Setup
// =============================================================================
// Connect To Database
mongoose.connect(config.dbPath)
.then(() => {
})
.catch((err) => {
console.log('Database error: ' + err);
mongoose.connect(config.dbPath);
})
;
// On Connection
mongoose.connection
.on('connected', () => {
console.log('Database connected at ' + config.dbPath);
});
// On Error
mongoose.connection
.on('error', (err) => {
console.log('Database error: ' + err);
});
const Order_event = exchangeContractEvents.Order();
const Deposit_event = exchangeContractEvents.Deposit();
const Withdraw_event = exchangeContractEvents.Withdraw();
const Cancel_event = exchangeContractEvents.Cancel();
const Trade_event = exchangeContractEvents.Trade();
Deposit_event.on('data', makeItem);
Withdraw_event.on('data', makeItem);
Cancel_event.on('data', makeItem);
Trade_event.on('data', makeItem);
Order_event.on('data', makeItem);
// we need an events route
function makeItem(res) {
let item = {};
utility.getURL(config.etherscanAPI + '/api?module=proxy&action=eth_getTransactionByHash&txhash=' + res.transactionHash + '&apikey=KF9ADFTHP4WJF1GV3WHJZCTFZIN5XZUXG1', (err, response) => {
if (!err) {
const responseFromURL = JSON.parse(response);
item = {
address: res.address,
blockNumber: res.blockNumber,
timeStamp: Date.now().toString(16),
gasPrice: responseFromURL.result.gasPrice,
gasUsed: responseFromURL.result.gas,
logIndex: res.logIndex,
transactionHash: res.transactionHash,
transactionIndex: res.transactionIndex,
event: res.event,
args: res.returnValues,
txLink: config.etherscanUrl + "/tx/" + res.transactionHash,
};
console.log('ITEM = ', item);
if (item.event === 'Trade') {
const query = {
$and: [
{ "order.tokenGet": item.args.tokenGet },
{ "order.tokenGive": item.args.tokenGive },
{ "order.amountGet": item.args.amountGet },
{ "order.amountGive": item.args.amountGive },
]
};
// in args we have tokenGet , tokenGive ,amount GEt , amount give (get address , give address are of no use to us )
Order.update(query, { $set: { "amountFilled": "true" } }, { multi: true }, function (err, post) {
if (err) throw err;
console.log("this is post from makeItem" + post);
});
}
console.log("from make Item the item formed is " + JSON.stringify(item));
Event.create(item, function (err, post) {
if (err) throw err;
console.log(" event posted " + post);
});
}
});
}
// ROUTES FOR OUR API
// =============================================================================
// create our router
const router = express.Router();
// middleware to use for all requests
router.use((req, res, next) => {
// do logging
console.log('host',req.host);
next();
});
// import our routers
// ----------------------------------------------------
//admin routes
router.use('/admin', require('./routes/admin'));
// get only route returns ticker
router.use('/returnticker', require('./routes/returnticker'));
// This route is get only , returns all pending orders
router.use('/orders', require('./routes/Orders'));
// this route is get only
router.use('/events', require('./routes/events'));
// This is post only route
router.use('/message', require('./routes/message'));
router.use('/toporders', require('./routes/toporders'));
// register our routers
// -------------------------------
app.use('/', router);
// START THE SERVER
// =============================================================================
//app.listen(process.env.PORT || config.port, (err) => {
// if (err)
// console.log(err);
// console.log('Server running at port:' + config.port);
//});
const httpsServer = https.createServer(credentials, app);
httpsServer.listen(config.port, () => {
console.log('HTTPS Server running on port' + config.port);
});