1 | var fs = require('fs');
|
2 | var Api = require('../helpers/api.js');
|
3 | var aschJS = require('asch-js');
|
4 |
|
5 | var globalOptions;
|
6 |
|
7 | function getApi() {
|
8 | return new Api({host: globalOptions.host, port: globalOptions.port, mainnet: !!globalOptions.main});
|
9 | }
|
10 |
|
11 | function pretty(obj) {
|
12 | return JSON.stringify(obj, null, 2);
|
13 | }
|
14 |
|
15 | function openAccount(secret) {
|
16 | getApi().post('/api/accounts/open', {secret: secret}, function (err, result) {
|
17 | console.log(err || pretty(result.account));
|
18 | });
|
19 | }
|
20 |
|
21 | function openAccountByPublicKey(publicKey) {
|
22 | getApi().post('/api/accounts/open2', {publicKey: publicKey}, function (err, result) {
|
23 | console.log(err || pretty(result.account));
|
24 | });
|
25 | }
|
26 |
|
27 | function getHeight() {
|
28 | getApi().get('/api/blocks/getHeight', function (err, result) {
|
29 | console.log(err || result.height);
|
30 | });
|
31 | }
|
32 |
|
33 | function getBlockStatus() {
|
34 | getApi().get('/api/blocks/getStatus', function (err, result) {
|
35 | console.log(err || pretty(result));
|
36 | });
|
37 | }
|
38 |
|
39 | function getBalance(address) {
|
40 | var params = {address: address};
|
41 | getApi().get('/api/accounts/getBalance', params, function (err, result) {
|
42 | console.log(err || result.balance);
|
43 | });
|
44 | }
|
45 |
|
46 | function getAccount(address) {
|
47 | var params = {address: address};
|
48 | getApi().get('/api/accounts/', params, function (err, result) {
|
49 | console.log(err || pretty(result.account));
|
50 | });
|
51 | }
|
52 |
|
53 | function getVotedDelegates(address, options) {
|
54 | var params = {
|
55 | address: address,
|
56 | limit: options.limit,
|
57 | offset: options.offset
|
58 | };
|
59 | getApi().get('/api/accounts/delegates', params, function (err, result) {
|
60 | console.log(err || result);
|
61 | });
|
62 | }
|
63 |
|
64 | function getDelegates(options) {
|
65 | var params = {
|
66 | limit: options.limit,
|
67 | offset: options.offset,
|
68 | orderBy: options.sort || "rate:asc"
|
69 | };
|
70 | getApi().get('/api/delegates/', params, function (err, result) {
|
71 | console.log(err || pretty(result.delegates));
|
72 | });
|
73 | }
|
74 |
|
75 | function getDelegatesCount() {
|
76 | getApi().get('/api/delegates/count', function (err, result) {
|
77 | console.log(err || result.count);
|
78 | });
|
79 | }
|
80 |
|
81 | function getVoters(publicKey) {
|
82 | var params = {publicKey: publicKey};
|
83 | getApi().get('/api/delegates/voters', params, function (err, result) {
|
84 | console.log(err || pretty(result.accounts));
|
85 | });
|
86 | }
|
87 |
|
88 | function getDelegateByPublicKey(publicKey) {
|
89 | var params = {publicKey: publicKey};
|
90 | getApi().get('/api/delegates/get', params, function (err, result) {
|
91 | console.log(err || pretty(result.delegate));
|
92 | });
|
93 | }
|
94 |
|
95 | function getDelegateByUsername(username) {
|
96 | var params = {username: username};
|
97 | getApi().get('/api/delegates/get', params, function (err, result) {
|
98 | console.log(err || pretty(result.delegate));
|
99 | });
|
100 | }
|
101 |
|
102 | function getBlocks(options) {
|
103 | var params = {
|
104 | limit: options.limit,
|
105 | orderBy: options.sort,
|
106 | offset: options.offset,
|
107 | totalAmount: options.totalAmount,
|
108 | totalFee: options.totalFee,
|
109 | reward: options.reward,
|
110 | generatorPublicKey: options.generatorPublicKey
|
111 | };
|
112 | getApi().get('/api/blocks/', params, function (err, result) {
|
113 | console.log(err || pretty(result));
|
114 | });
|
115 | }
|
116 |
|
117 | function getBlockById(id) {
|
118 | var params = {id: id};
|
119 | getApi().get('/api/blocks/get', params, function (err, result) {
|
120 | console.log(err || pretty(result.block));
|
121 | });
|
122 | }
|
123 |
|
124 | function getBlockByHeight(height) {
|
125 | var params = {height: height};
|
126 | getApi().get('/api/blocks/get', params, function (err, result) {
|
127 | console.log(err || pretty(result.block));
|
128 | });
|
129 | }
|
130 |
|
131 | function getPeers(options) {
|
132 | var params = {
|
133 | limit: options.limit,
|
134 | orderBy: options.sort,
|
135 | offset: options.offset,
|
136 | state: options.state,
|
137 | os: options.os,
|
138 | port: options.port,
|
139 | version: options.version
|
140 | };
|
141 |
|
142 | getApi().get('/api/peers/', params, function (err, result) {
|
143 | console.log(err || pretty(result.peers));
|
144 | });
|
145 | }
|
146 |
|
147 | function getUnconfirmedTransactions(options) {
|
148 | var params = {
|
149 | senderPublicKey: options.key,
|
150 | address: options.address
|
151 | };
|
152 | getApi().get('/api/transactions/unconfirmed', params, function (err, result) {
|
153 | console.log(err || pretty(result.transactions));
|
154 | });
|
155 | }
|
156 |
|
157 | function getTransactions(options) {
|
158 | var params = {
|
159 | blockId: options.blockId,
|
160 | limit: options.limit,
|
161 | orderBy: options.sort,
|
162 | offset: options.offset,
|
163 | type: options.type,
|
164 | senderPublicKey: options.senderPublicKey,
|
165 | senderId: options.senderId,
|
166 | recipientId: options.recipientId,
|
167 | amount: options.amount,
|
168 | fee: options.fee
|
169 | };
|
170 | getApi().get('/api/transactions/', params, function (err, result) {
|
171 | console.log(err || pretty(result.transactions));
|
172 | });
|
173 | }
|
174 |
|
175 | function getTransaction(id) {
|
176 | var params = {id: id};
|
177 | getApi().get('/api/transactions/get', params, function (err, result) {
|
178 | console.log(err || pretty(result.transaction));
|
179 | });
|
180 | }
|
181 |
|
182 | function sendMoney(options) {
|
183 |
|
184 |
|
185 |
|
186 |
|
187 |
|
188 |
|
189 |
|
190 |
|
191 |
|
192 | var trs = aschJS.transaction.createTransaction(
|
193 | options.to,
|
194 | options.amount * 100000000,
|
195 | options.secret,
|
196 | options.secondSecret
|
197 | );
|
198 | getApi().broadcastTransaction(trs, function (err, result) {
|
199 | console.log(err || result.success);
|
200 | });
|
201 | }
|
202 |
|
203 | function registerDelegate(options) {
|
204 |
|
205 |
|
206 |
|
207 |
|
208 |
|
209 |
|
210 |
|
211 |
|
212 | var trs = aschJS.delegate.createDelegate(
|
213 | options.secret,
|
214 | options.username,
|
215 | options.secondSecret
|
216 | );
|
217 | getApi().broadcastTransaction(trs, function (err, result) {
|
218 | console.log(err || result.success);
|
219 | });
|
220 | }
|
221 |
|
222 | function vote(secret, publicKeys, op, secondSecret) {
|
223 | var votes = publicKeys.split(',').map(function (el) {
|
224 | return op + el;
|
225 | });
|
226 | var trs = aschJS.vote.createVote(
|
227 | secret,
|
228 | votes,
|
229 | secondSecret
|
230 | );
|
231 | getApi().broadcastTransaction(trs, function (err, result) {
|
232 | console.log(err || result.success);
|
233 | });
|
234 | }
|
235 |
|
236 | function upvote(options) {
|
237 | vote(options.secret, options.publicKeys, '+', options.secondSecret);
|
238 | }
|
239 |
|
240 | function downvote(options) {
|
241 | vote(options.secret, options.publicKeys, '-', options.secondSecret);
|
242 | }
|
243 |
|
244 | function setSecondSecret(options) {
|
245 | var trs = aschJS.signature.createSignature(options.secret, options.secondSecret);
|
246 | getApi().broadcastTransaction(trs, function (err, result) {
|
247 | console.log(err || result.success);
|
248 | });
|
249 | }
|
250 |
|
251 | function registerDapp(options) {
|
252 | if (!options.metafile || !fs.existsSync(options.metafile)) {
|
253 | console.error("Error: invalid params, dapp meta file must exists");
|
254 | return;
|
255 | }
|
256 | var dapp = JSON.parse(fs.readFileSync(options.metafile, 'utf8'));
|
257 | var trs = aschJS.dapp.createDapp(options.secret, options.secondSecret, dapp);
|
258 | getApi().broadcastTransaction(trs, function (err, result) {
|
259 | console.log(err || result.success);
|
260 | console.log('DappId:', trs.id);
|
261 | });
|
262 | }
|
263 |
|
264 | module.exports = function(program) {
|
265 | globalOptions = program;
|
266 |
|
267 | program
|
268 | .command("getheight")
|
269 | .description("get block height")
|
270 | .action(getHeight);
|
271 |
|
272 | program
|
273 | .command("getblockstatus")
|
274 | .description("get block status")
|
275 | .action(getBlockStatus);
|
276 |
|
277 | program
|
278 | .command("openaccount [secret]")
|
279 | .description("open your account and get the infomation by secret")
|
280 | .action(openAccount);
|
281 |
|
282 | program
|
283 | .command("openaccountbypublickey [publickey]")
|
284 | .description("open your account and get the infomation by publickey")
|
285 | .action(openAccountByPublicKey);
|
286 |
|
287 | program
|
288 | .command("getbalance [address]")
|
289 | .description("get balance by address")
|
290 | .action(getBalance);
|
291 |
|
292 | program
|
293 | .command("getaccount [address]")
|
294 | .description("get account by address")
|
295 | .action(getAccount);
|
296 |
|
297 | program
|
298 | .command("getvoteddelegates [address]")
|
299 | .description("get delegates voted by address")
|
300 | .option("-o, --offset <n>", "")
|
301 | .option("-l, --limit <n>", "")
|
302 | .action(getVotedDelegates);
|
303 |
|
304 | program
|
305 | .command("getdelegatescount")
|
306 | .description("get delegates count")
|
307 | .action(getDelegatesCount);
|
308 |
|
309 | program
|
310 | .command("getdelegates")
|
311 | .description("get delegates")
|
312 | .option("-o, --offset <n>", "")
|
313 | .option("-l, --limit <n>", "")
|
314 | .option("-s, --sort <field:mode>", "rate:asc, vote:desc, ...")
|
315 | .action(getDelegates);
|
316 |
|
317 | program
|
318 | .command("getvoters [publicKey]")
|
319 | .description("get voters of a delegate by public key")
|
320 | .action(getVoters);
|
321 |
|
322 | program
|
323 | .command("getdelegatebypublickey [publicKey]")
|
324 | .description("get delegate by public key")
|
325 | .action(getDelegateByPublicKey);
|
326 |
|
327 | program
|
328 | .command("getdelegatebyusername [username]")
|
329 | .description("get delegate by username")
|
330 | .action(getDelegateByUsername);
|
331 |
|
332 | program
|
333 | .command("getblocks")
|
334 | .description("get blocks")
|
335 | .option("-o, --offset <n>", "")
|
336 | .option("-l, --limit <n>", "")
|
337 | .option("-r, --reward <n>", "")
|
338 | .option("-f, --totalFee <n>", "")
|
339 | .option("-a, --totalAmount <n>", "")
|
340 | .option("-g, --generatorPublicKey <publicKey>", "")
|
341 | .option("-s, --sort <field:mode>", "height:asc, totalAmount:asc, totalFee:asc")
|
342 | .action(getBlocks);
|
343 |
|
344 | program
|
345 | .command("getblockbyid [id]")
|
346 | .description("get block by id")
|
347 | .action(getBlockById);
|
348 |
|
349 | program
|
350 | .command("getblockbyheight [height]")
|
351 | .description("get block by height")
|
352 | .action(getBlockByHeight);
|
353 |
|
354 | program
|
355 | .command("getpeers")
|
356 | .description("get peers")
|
357 | .option("-o, --offset <n>", "")
|
358 | .option("-l, --limit <n>", "")
|
359 | .option("-t, --state <n>", " 0 ~ 3")
|
360 | .option("-s, --sort <field:mode>", "")
|
361 | .option("-v, --version <version>", "")
|
362 | .option("-p, --port <n>", "")
|
363 | .option("--os <os>", "")
|
364 | .action(getPeers);
|
365 |
|
366 | program
|
367 | .command("getunconfirmedtransactions")
|
368 | .description("get unconfirmed transactions")
|
369 | .option("-k, --key <sender public key>", "")
|
370 | .option("-a, --address <address>", "")
|
371 | .action(getUnconfirmedTransactions);
|
372 |
|
373 | program
|
374 | .command("gettransactions")
|
375 | .description("get transactions")
|
376 | .option("-b, --blockId <id>", "")
|
377 | .option("-o, --offset <n>", "")
|
378 | .option("-l, --limit <n>", "")
|
379 | .option("-t, --type <n>", "transaction type")
|
380 | .option("-s, --sort <field:mode>", "")
|
381 | .option("-a, --amount <n>", "")
|
382 | .option("-f, --fee <n>", "")
|
383 | .option("--senderPublicKey <key>", "")
|
384 | .option("--senderId <id>", "")
|
385 | .option("--recipientId <id>", "")
|
386 | .action(getTransactions);
|
387 |
|
388 | program
|
389 | .command("gettransaction [id]")
|
390 | .description("get transactions")
|
391 | .action(getTransaction);
|
392 |
|
393 | program
|
394 | .command("sendmoney")
|
395 | .description("send money to some address")
|
396 | .option("-e, --secret <secret>", "")
|
397 | .option("-s, --secondSecret <secret>", "")
|
398 | .option("-a, --amount <n>", "")
|
399 | .option("-t, --to <address>", "")
|
400 | .action(sendMoney);
|
401 |
|
402 | program
|
403 | .command("registerdelegate")
|
404 | .description("register delegate")
|
405 | .option("-e, --secret <secret>", "")
|
406 | .option("-s, --secondSecret <secret>", "")
|
407 | .option("-u, --username <username>", "")
|
408 | .action(registerDelegate);
|
409 |
|
410 | program
|
411 | .command("upvote")
|
412 | .description("vote for delegates")
|
413 | .option("-e, --secret <secret>", "")
|
414 | .option("-s, --secondSecret <secret>", "")
|
415 | .option("-p, --publicKeys <public key list>", "")
|
416 | .action(upvote);
|
417 |
|
418 | program
|
419 | .command("downvote")
|
420 | .description("cancel vote for delegates")
|
421 | .option("-e, --secret <secret>", "")
|
422 | .option("-s, --secondSecret <secret>", "")
|
423 | .option("-p, --publicKeys <public key list>", "")
|
424 | .action(downvote);
|
425 |
|
426 | program
|
427 | .command("setsecondsecret")
|
428 | .description("set second secret")
|
429 | .option("-e, --secret <secret>", "")
|
430 | .option("-s, --secondSecret <secret>", "")
|
431 | .action(setSecondSecret);
|
432 |
|
433 | program
|
434 | .command("registerdapp")
|
435 | .description("register a dapp")
|
436 | .option("-e, --secret <secret>", "")
|
437 | .option("-s, --secondSecret <secret>", "")
|
438 | .option("-f, --metafile <metafile>", "dapp meta file")
|
439 | .action(registerDapp);
|
440 | } |
\ | No newline at end of file |