Source: daemonService/daemonServiceZelnodeRpcs.js

  1. const serviceHelper = require('../serviceHelper');
  2. const messageHelper = require('../messageHelper');
  3. const daemonServiceUtils = require('./daemonServiceUtils');
  4. const verificationHelper = require('../verificationHelper');
  5. let response = messageHelper.createErrorMessage();
  6. /**
  7. * To get node status.
  8. * @param {object} req Request.
  9. * @param {object} res Response.
  10. * @returns {object} Message.
  11. */
  12. async function getZelNodeStatus(req, res) {
  13. const rpccall = 'getzelnodestatus';
  14. response = await daemonServiceUtils.executeCall(rpccall);
  15. return res ? res.json(response) : response;
  16. }
  17. /**
  18. * To list nodes. Optional filter can be included as a parameter for RPC call.
  19. * @param {object} req Request.
  20. * @param {object} res Response.
  21. * @returns {object} Message.
  22. */
  23. async function listZelNodes(req, res) {
  24. let { filter } = req.params;
  25. filter = filter || req.query.filter;
  26. const rpccall = 'listzelnodes';
  27. const rpcparameters = [];
  28. if (filter) {
  29. rpcparameters.push(filter);
  30. }
  31. response = await daemonServiceUtils.executeCall(rpccall, rpcparameters);
  32. return res ? res.json(response) : response;
  33. }
  34. /**
  35. * To list node configuration. Optional filter can be included as a parameter for RPC call. Only accessible by admins.
  36. * @param {object} req Request.
  37. * @param {object} res Response.
  38. * @returns {object} Message.
  39. */
  40. async function listZelNodeConf(req, res) { // practically useless
  41. const authorized = await verificationHelper.verifyPrivilege('admin', req);
  42. let { filter } = req.params;
  43. filter = filter || req.query.filter;
  44. if (authorized !== true) {
  45. response = messageHelper.errUnauthorizedMessage();
  46. return res ? res.json(response) : response;
  47. }
  48. const rpccall = 'listzelnodeconf';
  49. const rpcparameters = [];
  50. if (filter) {
  51. rpcparameters.push(filter);
  52. }
  53. response = await daemonServiceUtils.executeCall(rpccall, rpcparameters);
  54. return res ? res.json(response) : response;
  55. }
  56. /**
  57. * To create node key. Only accessible by admins.
  58. * @param {object} req Request.
  59. * @param {object} res Response.
  60. * @returns {object} Message.
  61. */
  62. async function createZelNodeKey(req, res) { // practically useless
  63. const authorized = await verificationHelper.verifyPrivilege('admin', req);
  64. if (authorized === true) {
  65. const rpccall = 'createzelnodekey';
  66. response = await daemonServiceUtils.executeCall(rpccall);
  67. } else {
  68. response = messageHelper.errUnauthorizedMessage();
  69. }
  70. return res ? res.json(response) : response;
  71. }
  72. /**
  73. * To get node sync status. Mode (defaults to status) required as parameter for RPC call. Only accessible by admins.
  74. * @param {object} req Request.
  75. * @param {object} res Response.
  76. * @returns {object} Message.
  77. */
  78. async function znsync(req, res) {
  79. let { mode } = req.params; // we accept both znsync/status and znsync?mode=status
  80. mode = mode || req.query.mode || 'status'; // default to status
  81. const rpccall = 'znsync';
  82. const rpcparameters = [mode];
  83. if (mode === 'status') {
  84. response = await daemonServiceUtils.executeCall(rpccall, rpcparameters);
  85. return res ? res.json(response) : response;
  86. }
  87. const authorized = await verificationHelper.verifyPrivilege('admin', req);
  88. if (authorized !== true) {
  89. response = messageHelper.errUnauthorizedMessage();
  90. return res ? res.json(response) : response;
  91. }
  92. response = await daemonServiceUtils.executeCall(rpccall, rpcparameters);
  93. return res ? res.json(response) : response;
  94. }
  95. /**
  96. * To create node broadcast. Command and alias required as parameters for RPC call. Only accessible by admins.
  97. * @param {object} req Request.
  98. * @param {object} res Response.
  99. * @returns {object} Message.
  100. */
  101. async function createZelNodeBroadcast(req, res) {
  102. let { command, alias } = req.params;
  103. command = command || req.query.command || '';
  104. alias = alias || req.query.alias || '';
  105. const authorized = await verificationHelper.verifyPrivilege('admin', req);
  106. if (authorized === true) {
  107. const rpccall = 'createzelnodebroadcast';
  108. const rpcparameters = [command, alias];
  109. response = await daemonServiceUtils.executeCall(rpccall, rpcparameters);
  110. } else {
  111. response = messageHelper.errUnauthorizedMessage();
  112. }
  113. return res ? res.json(response) : response;
  114. }
  115. /**
  116. * To decode node broadcast. Optional hex string can be included as a parameter for RPC call.
  117. * @param {object} req Request.
  118. * @param {object} res Response.
  119. * @returns {object} Message.
  120. */
  121. async function decodeZelNodeBroadcast(req, res) {
  122. let { hexstring } = req.params;
  123. hexstring = hexstring || req.query.hexstring;
  124. const rpccall = 'decodezelnodebroadcast';
  125. const rpcparameters = [];
  126. if (hexstring) {
  127. rpcparameters.push(hexstring);
  128. }
  129. response = await daemonServiceUtils.executeCall(rpccall, rpcparameters);
  130. return res ? res.json(response) : response;
  131. }
  132. /**
  133. * To get node count.
  134. * @param {object} req Request.
  135. * @param {object} res Response.
  136. * @returns {object} Message.
  137. */
  138. async function getZelNodeCount(req, res) {
  139. const rpccall = 'getzelnodecount';
  140. response = await daemonServiceUtils.executeCall(rpccall);
  141. return res ? res.json(response) : response;
  142. }
  143. /**
  144. * To get DOS list.
  145. * @param {object} req Request.
  146. * @param {object} res Response.
  147. * @returns {object} Message.
  148. */
  149. async function getDOSList(req, res) {
  150. const rpccall = 'getdoslist';
  151. response = await daemonServiceUtils.executeCall(rpccall);
  152. return res ? res.json(response) : response;
  153. }
  154. /**
  155. * To get start list.
  156. * @param {object} req Request.
  157. * @param {object} res Response.
  158. * @returns {object} Message.
  159. */
  160. async function getStartList(req, res) {
  161. const rpccall = 'getstartlist';
  162. response = await daemonServiceUtils.executeCall(rpccall);
  163. return res ? res.json(response) : response;
  164. }
  165. /**
  166. * To get node outputs. Only accessible by admins.
  167. * @param {object} req Request.
  168. * @param {object} res Response.
  169. * @returns {object} Message.
  170. */
  171. async function getZelNodeOutputs(req, res) {
  172. const authorized = await verificationHelper.verifyPrivilege('admin', req);
  173. if (authorized !== true) {
  174. response = messageHelper.errUnauthorizedMessage();
  175. return res ? res.json(response) : response;
  176. }
  177. const rpccall = 'getzelnodeoutputs';
  178. response = await daemonServiceUtils.executeCall(rpccall);
  179. return res ? res.json(response) : response;
  180. }
  181. /**
  182. * To get node scores. Optional number of blocks can be included as a parameter for RPC call. Otherwise defaults to 10 blocks.
  183. * @param {object} req Request.
  184. * @param {object} res Response.
  185. * @returns {object} Message.
  186. */
  187. async function getZelNodeScores(req, res) {
  188. let { blocks } = req.params;
  189. blocks = blocks || req.query.blocks || '10';
  190. const rpccall = 'getzelnodescores';
  191. const rpcparameters = [];
  192. rpcparameters.push(blocks);
  193. response = await daemonServiceUtils.executeCall(rpccall, rpcparameters);
  194. return res ? res.json(response) : response;
  195. }
  196. /**
  197. * To get node winnners. Optional filter can be included as a parameter for RPC call. Optional number of blocks can be included as a parameter for RPC call. Otherwise defaults to 10 blocks.
  198. * @param {object} req Request.
  199. * @param {object} res Response.
  200. * @returns {object} Message.
  201. */
  202. async function getZelNodeWinners(req, res) {
  203. let { blocks, filter } = req.params;
  204. blocks = blocks || req.query.blocks || '10'; // defaults to 10 as default zelcash value
  205. filter = filter || req.query.filter;
  206. const rpccall = 'getzelnodewinners';
  207. const rpcparameters = [];
  208. rpcparameters.push(blocks);
  209. if (filter) {
  210. rpcparameters.push(filter);
  211. }
  212. response = await daemonServiceUtils.executeCall(rpccall, rpcparameters);
  213. return res ? res.json(response) : response;
  214. }
  215. /**
  216. * To relay node broadcast. Optional hex string can be included as a parameter for RPC call.
  217. * @param {object} req Request.
  218. * @param {object} res Response.
  219. * @returns {object} Message.
  220. */
  221. async function relayZelNodeBroadcast(req, res) {
  222. let { hexstring } = req.params;
  223. hexstring = hexstring || req.query.hexstring;
  224. const rpccall = 'relayzelnodebroadcast';
  225. const rpcparameters = [];
  226. if (hexstring) {
  227. rpcparameters.push(hexstring);
  228. }
  229. response = await daemonServiceUtils.executeCall(rpccall, rpcparameters);
  230. return res ? res.json(response) : response;
  231. }
  232. /**
  233. * To show spork. Optional value can be included as a parameter for RPC call. Optional name can be included as a parameter for RPC call. Otherwise defaults to show.
  234. * @param {object} req Request.
  235. * @param {object} res Response.
  236. * @returns {object} Message.
  237. */
  238. async function spork(req, res) {
  239. let { name, value } = req.params;
  240. name = name || req.query.name || 'show'; // name, show, active
  241. value = value || req.query.value;
  242. const rpccall = 'spork';
  243. const rpcparameters = [];
  244. rpcparameters.push(name);
  245. if (value) {
  246. value = serviceHelper.ensureNumber(value);
  247. rpcparameters.push(value);
  248. }
  249. response = await daemonServiceUtils.executeCall(rpccall, rpcparameters);
  250. return res ? res.json(response) : response;
  251. }
  252. /**
  253. * To start deterministic node. Alias required as a parameter for RPC call if not already specified. Optional lock wallet configuration can be included as a parameter for RPC call. Only accessible by admins.
  254. * @param {object} req Request.
  255. * @param {object} res Response.
  256. * @returns {object} Message.
  257. */
  258. async function startDeterministicZelNode(req, res) {
  259. let { alias, lockwallet } = req.params;
  260. alias = alias || req.query.alias;
  261. lockwallet = lockwallet ?? req.query.lockwallet ?? false;
  262. lockwallet = serviceHelper.ensureBoolean(lockwallet);
  263. const authorized = await verificationHelper.verifyPrivilege('admin', req);
  264. if (authorized === true) {
  265. const rpccall = 'startdeterministiczelnode';
  266. const rpcparameters = [];
  267. rpcparameters.push(alias);
  268. rpcparameters.push(lockwallet);
  269. response = await daemonServiceUtils.executeCall(rpccall, rpcparameters);
  270. } else {
  271. response = messageHelper.errUnauthorizedMessage();
  272. }
  273. return res ? res.json(response) : response;
  274. }
  275. /**
  276. * To start node. Set and lock wallet configurations required as parameters for RPC call if not already specified. Optional alias can be included as a parameter for RPC call. Only accessible by admins.
  277. * @param {object} req Request.
  278. * @param {object} res Response.
  279. * @returns {object} Message.
  280. */
  281. async function startZelNode(req, res) {
  282. let { set, lockwallet, alias } = req.params;
  283. set = set || req.query.set;
  284. lockwallet = lockwallet ?? req.query.lockwallet;
  285. alias = alias || req.query.alias;
  286. const authorized = await verificationHelper.verifyPrivilege('admin', req);
  287. if (authorized === true) {
  288. const rpccall = 'startzelnode';
  289. const rpcparameters = [];
  290. rpcparameters.push(set);
  291. rpcparameters.push(lockwallet);
  292. if (alias) {
  293. rpcparameters.push(alias);
  294. }
  295. response = await daemonServiceUtils.executeCall(rpccall, rpcparameters);
  296. } else {
  297. response = messageHelper.errUnauthorizedMessage();
  298. }
  299. return res ? res.json(response) : response;
  300. }
  301. /**
  302. * To view list of deterministic nodes. Optional filter can be included as a parameter for RPC call.
  303. * @param {object} req Request.
  304. * @param {object} res Response.
  305. * @returns {object} Message.
  306. */
  307. async function viewDeterministicZelNodeList(req, res) {
  308. let { filter } = req.params;
  309. filter = filter || req.query.filter;
  310. const rpccall = 'viewdeterministiczelnodelist';
  311. const rpcparameters = [];
  312. if (filter) {
  313. rpcparameters.push(filter);
  314. }
  315. response = await daemonServiceUtils.executeCall(rpccall, rpcparameters);
  316. return res ? res.json(response) : response;
  317. }
  318. /**
  319. * To show current node winner.
  320. * @param {object} req Request.
  321. * @param {object} res Response.
  322. * @returns {object} Message.
  323. */
  324. async function zelNodeCurrentWinner(req, res) {
  325. const rpccall = 'zelnodecurrentwinner';
  326. response = await daemonServiceUtils.executeCall(rpccall);
  327. return res ? res.json(response) : response;
  328. }
  329. /**
  330. * To debug node.
  331. * @param {object} req Request.
  332. * @param {object} res Response.
  333. * @returns {object} Message.
  334. */
  335. async function zelNodeDebug(req, res) {
  336. const rpccall = 'zelnodedebug';
  337. response = await daemonServiceUtils.executeCall(rpccall);
  338. return res ? res.json(response) : response;
  339. }
  340. module.exports = {
  341. createZelNodeBroadcast,
  342. createZelNodeKey,
  343. decodeZelNodeBroadcast,
  344. getZelNodeCount,
  345. getZelNodeOutputs,
  346. getZelNodeScores,
  347. getZelNodeStatus,
  348. getZelNodeWinners,
  349. listZelNodeConf,
  350. listZelNodes,
  351. relayZelNodeBroadcast,
  352. spork,
  353. startDeterministicZelNode,
  354. startZelNode,
  355. viewDeterministicZelNodeList,
  356. zelNodeCurrentWinner,
  357. zelNodeDebug,
  358. znsync,
  359. getDOSList,
  360. getStartList,
  361. };