Skip to content

Commit a1f3f7f

Browse files
committed
first commit
0 parents  commit a1f3f7f

File tree

22,729 files changed

+2030437
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

22,729 files changed

+2030437
-0
lines changed

app.js

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
const {
2+
Router
3+
} = require("express");
4+
5+
const mongoose = require("mongoose");
6+
const queries = require("./database/queriesFunc");
7+
const config = require('./config');
8+
9+
const app = Router();
10+
11+
// mainnet
12+
var btcMain = require('./controllers/Bitcoin/index');
13+
var ethMain = require("./controllers/Ethereum/eth");
14+
var erc20Main = require("./controllers/Ethereum/erc20");
15+
var apiServices = require("./database/services");
16+
17+
// testnet
18+
var ethTest = require("./controllers/Testnet_Ethereum/eth");
19+
var erc20Test = require("./controllers/Testnet_Ethereum/erc20");
20+
21+
app.use("/services", ensureWebToken, apiServices);
22+
23+
// mainnet server
24+
app.use("/bitcoin/mainnet", ensureWebToken, btcMain);
25+
app.use("/ether/mainnet", ensureWebToken, ethMain);
26+
app.use("/token/mainnet", ensureWebToken, erc20Main);
27+
28+
// testnet
29+
app.use("/ether/testnet", ensureWebToken, ethTest);
30+
app.use("/token/testnet", ensureWebToken, erc20Test);
31+
32+
app.get("/", async function (request, response) {
33+
response.contentType("application/json");
34+
response.end(JSON.stringify("Node is running"));
35+
});
36+
37+
app.use("/*", function (req, res) {
38+
return res.json({
39+
code: 404,
40+
data: null,
41+
msg: "Invalid Request 1 {URL Not Found}",
42+
});
43+
});
44+
45+
async function ensureWebToken(req, res, next) {
46+
if(req.path !== '/createApi') {
47+
const x_access_token = req.headers["authorization"];
48+
if (typeof x_access_token !== undefined) {
49+
const query = await queries.checkApiExist(x_access_token);
50+
if (query[0] != x_access_token && query.toString() != "") {
51+
next();
52+
} else {
53+
res.sendStatus(403);
54+
}
55+
56+
} else {
57+
res.sendStatus(403);
58+
}
59+
} else {
60+
const admin_key = config.admin.auth_key;
61+
const admin_password = config.admin.auth_password;
62+
63+
const auth_key = req.body['auth_key'];
64+
const auth_password = req.body['auth_password'];
65+
if(admin_key == auth_key && admin_password == auth_password)
66+
next();
67+
else
68+
res.sendStatus(403);
69+
}
70+
}
71+
72+
module.exports.routes = app;

config.js

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
module.exports = {
2+
mongodb: 'mongodb+srv://hamidraza:[email protected]/Cluster0?retryWrites=true&w=majority',
3+
daemons: {
4+
eth: {
5+
chainId: 1,
6+
network: 'mainnet',
7+
provider: "https://mainnet.infura.io/v3/72c53bc23c234df3a80f4e2c95f72d81",
8+
chains: { mainnet: 1, ropsten: 3, rinkeby: 4, goerly: 5, kovan: 42,}
9+
},
10+
test_eth: {
11+
chainId: 42,
12+
network: 'testnet',
13+
provider: "https://kovan.infura.io/v3/72c53bc23c234df3a80f4e2c95f72d81",
14+
chains: { mainnet: 1, ropsten: 3, rinkeby: 4, goerly: 5, kovan: 42,}
15+
},
16+
btc: {
17+
host: '127.0.0.1',
18+
port: 4000,
19+
username: 'Lwg7hJay71ku',
20+
password: 'Hk7eSZ1WUUl8GGWfn1jn',
21+
path: "/root/.bitcoin",
22+
},
23+
},
24+
25+
db: {
26+
host: '127.0.0.1',
27+
dbname: 'cryptoapis',
28+
dbport: 27017,
29+
},
30+
31+
admin: {
32+
auth_key: "onewordseeker",
33+
auth_password: "Fop1020-25"
34+
},
35+
36+
port: 4000,
37+
}

controllers/Bitcoin/index.js

+258
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,258 @@
1+
//This module help to listen request
2+
var express = require("express");
3+
const axios = require("axios");
4+
var router = express.Router();
5+
6+
const {checkIfExist} = require('../../utils');
7+
8+
const config = require("../../config");
9+
const BitcoinCore = require('bitcoin-core');
10+
const AddressModel = require('../../database/address');
11+
12+
13+
// ---------------------------------Create Account----------------------------------------------
14+
router.get("/create_wallet", async function (request, response) {
15+
let wallet_name = request.query.name ? request.query.name : "";
16+
let callback_url = request.query.callback_url;
17+
if(!callback_url) callback_url = null;
18+
19+
var ResponseCode = 200;
20+
var ResponseMessage = ``;
21+
var ResponseData = null;
22+
try {
23+
var date = new Date();
24+
var timestamp = date.getTime();
25+
26+
var wallet_config = {
27+
username: config.daemons.btc.username,
28+
password: config.daemons.btc.password,
29+
wallet: 'default'
30+
}
31+
32+
var bitcoinClient = new BitcoinCore(wallet_config);
33+
if(wallet_name != "") {
34+
if(!checkIfExist(wallet_name)) await bitcoinClient.createWallet(wallet_name);
35+
} else {
36+
wallet_name = "default";
37+
}
38+
39+
wallet_config["wallet"] = wallet_name;
40+
bitcoinClient = new BitcoinCore(wallet_config);
41+
42+
var address = await bitcoinClient.getNewAddress();
43+
var privateKey = await bitcoinClient.dumpPrivKey(address);
44+
45+
await AddressModel.collection.insertOne({
46+
currency: 'btc',
47+
address: address,
48+
wallet: wallet_name,
49+
callback_url: callback_url,
50+
created_at: date,
51+
})
52+
53+
ResponseData = {
54+
wallet: {
55+
private: privateKey,
56+
public: address,
57+
address: address,
58+
currency: "BTC",
59+
balance: 0,
60+
create_date: date,
61+
sent: 0,
62+
received: 0,
63+
link: `https://www.blockchain.com/btc/address/${address}`
64+
},
65+
message: "",
66+
timestamp: timestamp,
67+
status: 200,
68+
success: true
69+
};
70+
71+
ResponseMessage = "Completed";
72+
ResponseCode = 200;
73+
} catch (error) {
74+
ResponseMessage = `Address creating stops with the error ${error}`;
75+
ResponseCode = 400;
76+
} finally {
77+
return response.status(200).json({
78+
code: ResponseCode,
79+
data: ResponseData,
80+
msg: ResponseMessage
81+
});
82+
}
83+
});
84+
85+
//-----------------------------Get Balance of Account----------------------------------------------
86+
router.get("/address/:walletAddress", async function (request, response) {
87+
try {
88+
var wallet_config = config.daemons.btc;
89+
wallet_config["wallet"] = "default";
90+
const bitcoinClient = new BitcoinCore(wallet_config);
91+
92+
const {isvalid} = await bitcoinClient.validateAddress(request.params.walletAddress);
93+
if(!isvalid) {
94+
response.status(400).json({
95+
invalidrequest: "Your wallet Invalid address"
96+
});
97+
} else {
98+
const result = await axios.get(
99+
"https://explorer.api.bitcoin.com/btc/v1/addr/" +
100+
request.params.walletAddress
101+
);
102+
const parsed = result.data;
103+
104+
if (parsed.balance === undefined) {
105+
response.status(404).json({
106+
notfound: "Your wallet Invalid address"
107+
});
108+
} else {
109+
response.json({
110+
balance: parsed.balance,
111+
address: parsed.addrStr,
112+
currency: "BTC"
113+
});
114+
};
115+
}
116+
} catch (e) {
117+
response.status(400).json({
118+
invalidrequest: "Your wallet Invalid address"
119+
});
120+
}
121+
});
122+
123+
router.get("/nonce/:walletAddress", async function (request, response) {
124+
try {
125+
var wallet_config = {
126+
username: config.daemons.btc.username,
127+
password: config.daemons.btc.password,
128+
wallet: 'default'
129+
}
130+
131+
const bitcoinClient = new BitcoinCore(wallet_config);
132+
133+
const {isvalid} = await bitcoinClient.validateAddress(request.params.walletAddress);
134+
if(!isvalid) {
135+
response.status(400).json({
136+
invalidrequest: "Your wallet Invalid address"
137+
});
138+
} else {
139+
const result = await axios.get(
140+
"https://explorer.api.bitcoin.com/btc/v1/addr/" +
141+
request.params.walletAddress
142+
);
143+
const parsed = result.data;
144+
145+
if (!parsed || parsed.balance === undefined) {
146+
response.status(404).json({
147+
notfound: "Your wallet Invalid address"
148+
});
149+
} else {
150+
response.json({
151+
nonce: parsed.transactions.length,
152+
address: parsed.addrStr,
153+
currency: "BTC"
154+
});
155+
};
156+
}
157+
} catch (e) {
158+
response.status(400).json({
159+
invalidrequest: "Your wallet Invalid address"
160+
});
161+
}
162+
});
163+
164+
//----------------------------------Send Bitcoins----------------------------------------------
165+
router.post("/transfer", async function (request, response) {
166+
let wallet_name = request.body.wallet_name;
167+
let toAddress = request.body.to_address;
168+
let amount = request.body.value;
169+
let errors = {};
170+
171+
if (!toAddress) {
172+
return response
173+
.status(400)
174+
.json((errors.toAddress = "To address or recipient address is required"));
175+
} else if (!amount) {
176+
return response.status(400).json((errors.value = "transfer value is required"));
177+
}
178+
179+
if (!wallet_name) {
180+
wallet_name = "default";
181+
} else {
182+
if(!checkIfExist(wallet_name)) {
183+
return response
184+
.status(400)
185+
.json((errors.wallet_name = "Wallet does not exist"));
186+
}
187+
}
188+
189+
var wallet_config = {
190+
username: config.daemons.btc.username,
191+
password: config.daemons.btc.password,
192+
wallet: 'default'
193+
}
194+
wallet_config["wallet"] = wallet_name;
195+
const bitcoinClient = new BitcoinCore(wallet_config);
196+
197+
const {isvalid} = await bitcoinClient.validateAddress(toAddress);
198+
if(!isvalid) {
199+
response.status(400).json({
200+
invalidrequest: "sYour wallet Invalid addres"
201+
});
202+
}
203+
204+
try{
205+
let hash = await bitcoinClient.sendToAddress(toAddress, amount);
206+
return response.status(200).json({
207+
msg: "Transaction is in mining state. For more info please watch transaction hash on bitcoin explorer",
208+
hash: hash
209+
});
210+
} catch (e) {
211+
return response.status(400).json({
212+
msg: "transfering failed",
213+
e,
214+
statuscode: 4
215+
});
216+
}
217+
});
218+
219+
router.get("/track/:wallet_address", async (req, res) => {
220+
try {
221+
const result = await axios.get(
222+
"https://explorer.api.bitcoin.com/btc/v1/txs/?address=" +
223+
req.params.wallet_address
224+
);
225+
226+
const parsed = result.data;
227+
if (parsed == "") {
228+
res.status(404).json({
229+
notfound: "No transactions"
230+
});
231+
} else res.json(parsed);
232+
} catch (e) {
233+
res.status(400).json(e);
234+
}
235+
});
236+
237+
router.get("/fetchtx/:hash", async (req, res) => {
238+
try {
239+
const result = await axios.get(
240+
"https://chain.api.btc.com/v3/tx/" +
241+
req.params.hash
242+
);
243+
244+
const parsed = result.data;
245+
if (!parsed || !parsed.data) {
246+
res.status(404).json({
247+
notfound: "No transactions"
248+
});
249+
} else res.json(parsed.data);
250+
} catch (e) {
251+
return res.status(200).json({
252+
msg: "invalid transaction reciept",
253+
e,
254+
statuscode: 4
255+
});
256+
}
257+
});
258+
module.exports = router;

0 commit comments

Comments
 (0)