feat(cli): add load subcommand
authorAJ ONeal <coolaj86@gmail.com>
Tue, 21 Jun 2022 07:05:23 +0000 (01:05 -0600)
committerAJ ONeal <coolaj86@gmail.com>
Tue, 21 Jun 2022 07:05:23 +0000 (01:05 -0600)
bin/crowdnode.js
cli/README.md

index 60a251f451d7b43f6f92fff2446e9f4ac995acd2..ddeafe28c646533806d1631da25c5d594d246001 100755 (executable)
@@ -68,6 +68,7 @@ function showHelp() {
 
   console.info("Helpful Extras:");
   console.info("    crowdnode generate [./privkey.wif]");
+  console.info("    crowdnode load [./privkey.wif]");
   console.info("    crowdnode balance ./privkey.wif");
   console.info(
     "    crowdnode transfer ./source.wif <key-file-or-pub-addr> [dash-amount]",
@@ -136,6 +137,18 @@ async function main() {
   let insightApi = Insight.create({ baseUrl: insightBaseUrl });
   let dashApi = Dash.create({ insightApi: insightApi });
 
+  if ("load" === subcommand) {
+    await load(
+      {
+        dashApi: dashApi,
+        insightBaseUrl: insightBaseUrl,
+        insightApi: insightApi,
+      },
+      args,
+    );
+    return;
+  }
+
   process.stdout.write("Checking CrowdNode API... ");
   await CrowdNode.init({
     baseUrl: "https://app.crowdnode.io",
@@ -330,6 +343,57 @@ async function generate(name) {
   process.exit(0);
 }
 
+async function load(psuedoState, args) {
+  let name = args.shift();
+
+  // TODO factor out the common bits from generate?
+  let pk = new Dashcore.PrivateKey();
+
+  let pub = pk.toAddress().toString();
+  let wif = pk.toWIF();
+
+  let filepath = `./${pub}.wif`;
+  let note = "";
+  if (name) {
+    filepath = name;
+    note = `\n(for pubkey address ${pub})`;
+  }
+
+  let err = await Fs.access(filepath).catch(Object);
+  if (!err) {
+    console.info(`'${filepath}' already exists (will not overwrite)`);
+  } else {
+    await Fs.writeFile(filepath, wif, "utf8");
+    console.info(`Generated ${filepath} ${note}`);
+  }
+
+  let desiredAmountDash = parseFloat(args.shift() || 0);
+  let desiredAmountDuff = Math.round(desiredAmountDash * DUFFS);
+  let effectiveDuff = desiredAmountDuff;
+  let effectiveDash = "";
+  if (!effectiveDuff) {
+    effectiveDuff = CrowdNode.stakeMinimum + signupTotal + feeEstimate;
+    effectiveDash = toDash(effectiveDuff);
+    // Round to the nearest mDash
+    // ex: 0.50238108 => 0.50300000
+    effectiveDuff = toDuff(Math.ceil(effectiveDash * 1000) / 1000);
+    effectiveDash = toDash(effectiveDuff);
+  }
+
+  console.info(``);
+  showQr(pub, effectiveDuff);
+  console.info(``);
+  console.info(
+    `Use the QR Code above to load ${effectiveDuff} (Đ${effectiveDash}) onto your staking key.`,
+  );
+  console.info(``);
+  console.info(`(waiting...)`);
+  console.info(``);
+  let payment = await Ws.waitForVout(psuedoState.insightBaseUrl, pub, 0);
+  console.info(`Received ${payment.satoshis}`);
+  process.exit(0);
+}
+
 async function balance(args, state) {
   console.info(state.balanceInfo);
   process.exit(0);
@@ -568,6 +632,7 @@ async function wifFileToAddr(keyfile) {
 }
 
 async function collectSignupFees(insightBaseUrl, pub) {
+  console.info(``);
   showQr(pub);
 
   let signupTotalDash = toDash(signupTotal);
@@ -589,6 +654,7 @@ async function collectSignupFees(insightBaseUrl, pub) {
 }
 
 async function collectDeposit(insightBaseUrl, pub, duffAmount) {
+  console.info(``);
   showQr(pub, duffAmount);
 
   let depositMsg = `Please send what you wish to deposit to ${pub}`;
index d37e756fecb2816fad0d39bce726408595402c43..2378d7280616a3a58993c03bf85668e884f5548b 100644 (file)
@@ -91,6 +91,7 @@ Usage:
 
 Helpful Extras:
     crowdnode generate [./privkey.wif]
+    crowdnode load [./privkey.wif] [dash-amount]
     crowdnode balance ./privkey.wif
     crowdnode transfer ./source.wif <key-file-or-pub-addr> [dash-amount]