Git Product home page Git Product logo

crowdnode-cli's Introduction

CrowdNode CLI

CrowdNode allows you to become a partial MNO - staking Dash to earn interest, participate in voting, etc.

This cross-platform CrowdNode CLI enables you to privately manage your stake via their KYC-free Blockchain API.

Summary Video

crowdnode summary thumbnail

Install

Node.js

You must have node.js v16 installed:

Mac & Linux

curl https://webinstall.dev/node@16 | bash

Follow the on-screen instructions.
You may need to close and re-open your terminal.

Windows

curl.exe -A MS https://webinstall.dev/node@lts | powershell

Follow the on-screen instructions.
You may need to close and re-open your terminal.

CrowdNode CLI

# Install to system, globally
npm install --location=global crowdnode-cli@v1

Note (npx users): feel free to npx -p crowdnode-cli@v1 crowdnode without installing.

CLI Usage

CrowdNode staking is managed with a permanent staking key.

The Dash you stake can NOT be retrieved without this key!

QuickStart

If you want to do everything, all at once:

crowdnode stake 10.0

Or, if you already have a key with a balance to deposit:

# Save a key from dash-cli or Dash Core's Debug Console to a file for import:
#    walletpassphrase "YOUR PASSHRASE" 300
#    dumprivkey XxYOURxADDRESSx
#
# Use as your CrowdNode CLI wallet:

crowdnode stake ./your-staking-key.wif

This will:

  • Generate a new staking key, or Import from an existing wallet
  • Load the key with Dash
  • Sign up & Accept the CrowdNode's Terms
  • Deposit

Note: I recommend printing a Paper Wallet (WIF QR) and putting it your safe.

Step-by-Step

  1. Generate or Import a permanent staking key:

    # Generate a new key in your CrowdNode CLI wallet:
    crowdnode generate

    Or

    # Save a key from dash-cli or Dash Core's Debug Console to a file for import:
    #    walletpassphrase "YOUR PASSHRASE" 300
    #    dumprivkey XxYOURxADDRESSx
    #
    # Import to the CrowdNode CLI wallet:
    crowdnode import ./your-key-file.wif.txt
  2. Load the amount of Dash you wish to stake, plus a little extra for fees:

    crowdnode load 0.503

    (you can load a balance via QR Code, Dash URL, and Payment Address)

  3. Send the Sign Up request and the CrowdNode Terms of Service:

    # Sign Up sends Đ0.00151072 to create your account
    crowdnode signup
    
    # Accept sends Đ0.00085536 to accept terms and enable deposits
    crowdnode accept
  4. Deposit a test stake (in DASH)

    # Create a test deposit:
    crowdnode deposit 0.01
    
    # Stake the remaining balance:
    crowdnode deposit
    
    # Load and stake another Đ10:
    crowdnode deposit 10.0

    Note: CrowdNode requires a minimum stake of Đ0.5 to earn interest.

You can withdraw from 1.0% to 100.0% of your stake at any time, and transfer to an address in another wallet:

# Withdraw 5.0%
crowdnode withdraw 5.0

# Transfer your balance
crowdnode transfer XxYOURxOTHERxADDRESSx

All Commmands

Quick Start:
    crowdnode stake [addr-or-import-key | --create-new]

Usage:
    crowdnode help
    crowdnode version

    crowdnode status [keyfile-or-addr]
    crowdnode signup [keyfile-or-addr]
    crowdnode accept [keyfile-or-addr]
    crowdnode deposit [keyfile-or-addr] [dash-amount] [--no-reserve]
    crowdnode withdraw [keyfile-or-addr] <percent> # 1.0-100.0 (steps by 0.1)

Helpful Extras:
    crowdnode balance [keyfile-or-addr]
    crowdnode load [keyfile-or-addr] [dash-amount]
    crowdnode transfer <from-keyfile-or-addr> <to-keyfile-or-addr> [dash-amount]

Key Management & Encryption:
    crowdnode init
    crowdnode generate [--plain-text] [./privkey.wif]
    crowdnode list
    crowdnode use <addr>            # set as default key
    crowdnode passphrase            # set or rotate passphrase
    crowdnode import <keyfile>      # copy and encrypt key
    crowdnode encrypt               # encrypt all keys
    crowdnode decrypt               # decrypt all keys
    crowdnode delete <addr>         # delete key (must have 0 balance)

CrowdNode HTTP RPC:
    crowdnode http FundsOpen <addr>
    crowdnode http VotingOpen <addr>
    crowdnode http GetFunds <addr>
    crowdnode http GetFundsFrom <addr> <seconds-since-epoch>
    crowdnode http GetBalance <addr>
    crowdnode http GetMessages <addr>
    crowdnode http IsAddressInUse <addr>
    crowdnode http SetEmail ./privkey.wif <email> <signature>
    crowdnode http Vote ./privkey.wif <gobject-hash>
        <Yes|No|Abstain|Delegate|DoNothing> <signature>
    crowdnode http SetReferral ./privkey.wif <referral-id> <signature>

Glossary

Term Description
addr your Dash address (Base58Check-encoded Pay-to-PubKey Address)
./privkey.wif the file path to your staking key in WIF (Base58Check) format
signature generated with dashmsg or dash-cli

JS API Documentation

See https://github.com/dashhive/crowdnode.js.

Official CrowdNode Docs

https://knowledge.crowdnode.io/en/articles/5963880-blockchain-api-guide

crowdnode-cli's People

Stargazers

 avatar  avatar

Watchers

 avatar

Forkers

michaelvkax

crowdnode-cli's Issues

doc: language around encryption / passphrase

Re: #9 (comment) and #9 (comment)

Would you like to protect your keys with a password [Y/n]?

would anything be lost or inaccurate?

I could go with

Would you like to encrypt your keys with a passphrase? [Y/n]:

It needs to be clear that it's encrypting and it needs to be clear that it's not a password.

Passwords are generally understood as a recoverable gatekeeping measure.

Passphrases are generally understood to an unrecoverable part of encryption.

Encryption is not recoverable.

Veritasium has a video on why, contrary to the "don't make me think" principle, it's actually important to cause people to stop and think when they need to learn information. If everything seems friendly and familiar they'll just pattern match and move on without taking in the new information.

discuss: balance output

Re: #9 (comment)

  1. Was a bit surprised to see more than exactly 1 DASH staked. Not a big deal for me, but might be for others?

You were asked to deposit Đ1.03 to account for Signup and ToS deposits. The deposits minus fees also count towards your stake.

Received 100300000

Key:       Đ  1.00300000

Accepting terms...
    ✅ AcceptTerms

reserving 50000 (Đ0.00050000) for withdrawals (--no-reserve to disable)

Initiating deposit of 100052926 (Đ1.00052926)...

Without knowing in advance how many utxos you'll be sending, the transfer fee, or other specifics that will be usually but not always the same, it's not reasonable to get it to deposit Đ1.00000000 perfectly.

DASH

  1. Is the terminal output supposed to be in markdown format?

Yes. dashhive/crowdnode.js#28

Not only that, but stdout is used for the kinds of text that a person would want to grep and stderr is used for the kinds of text that someone would most likely want to ignore when piping between programs.

One of the great philosophies of Unix is that you should be able to use the output of one program as the input to another program - "piping".

The idea is that if someone were writing a simple bash script using crowdnode-cli, it should behave nicely for them with grep, sed, awk, (and the modern rg, sd, bat) etc and they should be able to duck-tape together something interesting.

QA Task 1 Notes

Notes while doing QA Task 1:

  1. Test all features of staking with the crowdnode-cli and report feedback e.g. suggested improvement, roadblocks, etc
    https://trello.com/c/QUOVFBdT/208-crowdnode-tooling-docs

General nodes

  1. Maybe make the global installation "recommended" on the Crowdnode CLI installation step, since people who know what they're doing know when to not do the recommended option, but people who don't will be lost.

  2. Maybe add a step how to open up a terminal for people who don't know what they're doing. I actually do think there will be some Dash people who are adventurous enough to use this CLI (if for no other reason, for privacy), but who just need that one prerequisite step of knowing how to get into Terminal (or the Windows alternative). I like the Mac option of typing command + spacebar, then typing "Terminal".

  3. The CLI Usage message is a little scary.

CrowdNode staking is managed with a permanent staking key.

The Dash you stake can NOT be retrieved without this key!

Maybe it could be reworded to make the user feel more safe if they follow x, y, z precautions.

Command notes

Command 1
npm install --location=global crowdnode-cli@v1```

Output:

added 110 packages, and audited 111 packages in 5s

14 packages are looking for funding
  run `npm fund` for details

4 moderate severity vulnerabilities

Some issues need review, and may require choosing
a different dependency.

Run `npm audit` for details.
npm notice 
npm notice New major version of npm available! 7.20.3 -> 8.13.2
npm notice Changelog: https://github.com/npm/cli/releases/tag/v8.13.2
npm notice Run npm install -g [email protected] to update!
npm notice 
20:56:50 [~] % 
Command 2
crowdnode stake 1 

Output:

zsh: command not found: crowdnode

Crowdnode CLI Testing Report

Crowdnode CLI Testing Report

Hello, I've been testing out the crowdnode cli and would like to provide my feedback to the team.
Since I had a CLI only Core Wallet installed on my server already I performed the steps to import the keys instead.

I installed CrowdNode CLI on Ubuntu 22.04 Server running Dash Core Wallet v18.1.0 using the following steps and then switching to v16 with the n tool:

sudo apt install nodejs npm
sudo npm install -g n
sudo n v16

When trying to install the app as per instructions I received this error:

npm install --location=global crowdnode-cli@v1
node:internal/modules/cjs/loader:1021
  const err = new Error(message);
              ^

Error: Cannot find module 'semver'
Require stack:
- /usr/share/nodejs/npm/lib/utils/unsupported.js
- /usr/share/nodejs/npm/lib/cli.js
- /usr/share/nodejs/npm/bin/npm-cli.js
    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:1021:15)
    at Function.Module._load (node:internal/modules/cjs/loader:866:27)
    at Module.require (node:internal/modules/cjs/loader:1093:19)
    at require (node:internal/modules/cjs/helpers:108:18)
    at Object.<anonymous> (/usr/share/nodejs/npm/lib/utils/unsupported.js:2:16)
    at Module._compile (node:internal/modules/cjs/loader:1191:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1245:10)
    at Module.load (node:internal/modules/cjs/loader:1069:32)
    at Function.Module._load (node:internal/modules/cjs/loader:904:12)
    at Module.require (node:internal/modules/cjs/loader:1093:19) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/usr/share/nodejs/npm/lib/utils/unsupported.js',
    '/usr/share/nodejs/npm/lib/cli.js',
    '/usr/share/nodejs/npm/bin/npm-cli.js'
  ]
}

But worked when I used sudo:

sudo npm install -g crowdnode-cli@v1

Used dash-cli to get a new address and it's private key:

dash-cli getnewaddress
dash-cli walletpassphrase
dash-cli dumpprivkey

NOTE: There is a typo on the doc at step 0 where dumprivkey should be dumpprivkey. I also suggest the instructions include saving the privkey to a wif file. I did not know exactly what the wif file format was and then found that just dumpprivkey > crowdnode.wif did the trick.

First time I ran crowdnode stake I did not send enough funds and received this error:

crowdnode stake ./crowdnode.wif
dash://##MYCROWDNODEADDRESS##?amount=0.50300000

Send Đ0.50300000 to your staking key via the QR above, or its address:
##MYCROWDNODEADDRESS##
(this key will be used to fund and control your CrowdNode account)
(waiting...)

Received 50298158

dash://##MYCROWDNODEADDRESS##

Fail:
RangeError: Invalid count value
    at String.repeat (<anonymous>)
    at collectSignupFees (/usr/local/lib/node_modules/crowdnode-cli/node_modules/crowdnode/bin/crowdnode.js:2060:20)
    at sendSignup (/usr/local/lib/node_modules/crowdnode-cli/node_modules/crowdnode/bin/crowdnode.js:1833:11)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async stakeDash (/usr/local/lib/node_modules/crowdnode-cli/node_modules/crowdnode/bin/crowdnode.js:494:7)
    at async main (/usr/local/lib/node_modules/crowdnode-cli/node_modules/crowdnode/bin/crowdnode.js:199:5)

The second attempt worked without issue:

crowdnode stake ./crowdnode.wif
Enter passphrase: ***********************************

🔐 Imported ~/.config/crowdnode/keys/##MYCROWDNODEADDRESS##.wif

Checking CrowdNode account...
    ℹ️ SignUpForApi deposit is 151072 (+ tx fee)
    ℹ️ AcceptTerms deposit is 85536 (+ tx fee)

dash://##MYCROWDNODEADDRESS##?amount=0.50300000

Send Đ0.50300000 to your staking key via the QR above, or its address:
##MYCROWDNODEADDRESS##
(this key will be used to fund and control your CrowdNode account)

(waiting...)


Received 50300000
Requesting account...
    ✅ SignUpForApi
Accepting terms...
    ✅ AcceptTerms
reserving 50000 (Đ0.00050000) for withdraws (--no-reserve to disable)
Initiating deposit of 50052927 (Đ0.50052927)...
    ✅ DepositReceived
Checking balance...
Key:       Đ  0.00060014  
CrowdNode: Đ  0.50238197  
Dividends: Đ  0.00000000  

Then I tried to get status but failed:

crowdnode status crowdnode.wif 

could not read 'crowdnode.wif' in ./ or match in ~/.config/crowdnode/keys/.

crowdnode status ~/.config/crowdnode/keys/##MYCROWDNODEADDRESS##.wif

could not read '/home/ubuntu/.config/crowdnode/keys/##MYCROWDNODEADDRESS##.wif' in ./ or match in ~/.config/crowdnode/keys/.

Keys are present:

ls ~/.config/crowdnode/keys/
##MYCROWDNODEADDRESS##.wif

crowdnode status ##MYCROWDNODEADDRESS##
Checking CrowdNode API... (hotwallet ##CROWDNODEHOTWALLETADDRESS##)

API Actions Complete for ##MYCROWDNODEADDRESS##:
    ✅ SignUpForApi
    ✅ AcceptTerms
    ✅ DepositReceived

CrowdNode Stake: 50238197 (Đ0.50238197)

Seem like the app does not work when using the wif file as a parameter. The wif file only works with crowdnode stake.
But after adding it as a default key it works better:

crowdnode list

Error: no default staking key selected.

Select a different address:
    crowdnode list
    crowdnode use <addr>

crowdnode use ##MYCROWDNODEADDRESS##
Enter passphrase: ***********************************

set /home/ubuntu/.config/crowdnode/default ##MYCROWDNODEADDRESS##
crowdnode list
Selected default staking key ##MYCROWDNODEADDRESS##

Staking keys: (in ~/.config/crowdnode/keys/)

##MYCROWDNODEADDRESS##

Or create a new staking key:
    crowdnode generate

I noticed the documentation mentioning --no-reserve but wasn't sure what it meant. Only after using the deposit command I figured it out. I suggest adding some text in the docs as to what this means:

crowdnode deposit [keyfile-or-addr] [dash-amount] [--no-reserve]

reserving 50000 (Đ0.00050000) for withdraws (--no-reserve to disable)

Next I tried to see what is the minimum I can stake, after I have staked my initial 0.5Đ, as this part was not mentioned in the docs. I still had some funds in my wallet so I tried 0.00000001 but started getting weird responses until I went up to 0.001 then it told me the correct amount I was missing in my wallet. I suggest adding a verification check or an alert and something in the docs to state what the minimim is. I'm not sure where the limitation is, at crowdnode or the app but this should avoid some user confusion.

crowdnode deposit  ##MYCROWDNODEADDRESS## 0.00000001
Checking CrowdNode API... (hotwallet ##CROWDNODEHOTWALLETADDRESS##)
reserving 50000 (Đ0.00050000) for withdraws (--no-reserve to disable)

dash://##MYCROWDNODEADDRESS##?amount=-0.00010013

Please deposit -10013 (Đ-0.00010013) to ##MYCROWDNODEADDRESS##


(waiting...)


crowdnode deposit  ##MYCROWDNODEADDRESS## 0.0001
Checking CrowdNode API... (hotwallet ##CROWDNODEHOTWALLETADDRESS##)
reserving 50000 (Đ0.00050000) for withdraws (--no-reserve to disable)

dash://##MYCROWDNODEADDRESS##?amount=-0.00000014

Please deposit -14 (Đ-0.00000014) to ##MYCROWDNODEADDRESS##


(waiting...)

crowdnode deposit  ##MYCROWDNODEADDRESS## 0.00010014
Checking CrowdNode API... (hotwallet ##CROWDNODEHOTWALLETADDRESS##)
reserving 50000 (Đ0.00050000) for withdraws (--no-reserve to disable)

dash://##MYCROWDNODEADDRESS##

Please send what you wish to deposit to ##MYCROWDNODEADDRESS##


(waiting...)

Balance is still too small: 70028 (Đ0.00070028)

crowdnode deposit  ##MYCROWDNODEADDRESS## 0.00020028
Checking CrowdNode API... (hotwallet ##CROWDNODEHOTWALLETADDRESS##)
reserving 50000 (Đ0.00050000) for withdraws (--no-reserve to disable)

dash://##MYCROWDNODEADDRESS##

Please send what you wish to deposit to ##MYCROWDNODEADDRESS##

crowdnode deposit  ##MYCROWDNODEADDRESS## 0.00070028
Checking CrowdNode API... (hotwallet ##CROWDNODEHOTWALLETADDRESS##)
reserving 50000 (Đ0.00050000) for withdraws (--no-reserve to disable)

dash://##MYCROWDNODEADDRESS##?amount=0.00050000

Please deposit 50000 (Đ0.00050000) to ##MYCROWDNODEADDRESS##


(waiting...)

crowdnode deposit  ##MYCROWDNODEADDRESS## 0.001
Checking CrowdNode API... (hotwallet ##CROWDNODEHOTWALLETADDRESS##)
reserving 50000 (Đ0.00050000) for withdraws (--no-reserve to disable)

dash://##MYCROWDNODEADDRESS##?amount=0.00079972

Please deposit 79972 (Đ0.00079972) to ##MYCROWDNODEADDRESS##


(waiting...)

Received 79972
Initiating deposit of 100000 (Đ0.00100000)...
Enter passphrase: ***********************************

Tested crowdnode load perfectly.

crowdnode load ##MYCROWDNODEADDRESS## 0.001

dash://##MYCROWDNODEADDRESS##?amount=0.00100000

Send Đ to your staking key via the QR above, or its address:
##MYCROWDNODEADDRESS##
(this key will be used to fund and control your CrowdNode account)

(waiting...)

Received 100000

crowdnode balance 
Selected default staking key ##MYCROWDNODEADDRESS##

Staking keys: (in ~/.config/crowdnode/keys/)

|                                    |   🔑 Holdings |   🪧  Stakings |   💸 Earnings |
| ---------------------------------: | ------------: | ------------: | ------------: |
| ##MYCROWDNODEADDRESS## | Đ  0.0016 | Đ  0.503 | Đ  0.00000809 |
|                                    |               |               |               |
|                             Totals | Đ  0.0016 | Đ  0.503 | Đ  0.00000809 |


crowdnode deposit 0.001
Selected default staking key ##MYCROWDNODEADDRESS##
Checking CrowdNode API... (hotwallet ##CROWDNODEHOTWALLETADDRESS##)
reserving 50000 (Đ0.00050000) for withdraws (--no-reserve to disable)
Initiating deposit of 100000 (Đ0.00100000)...
Enter passphrase: ***********************************
incorrect passphrase
Enter passphrase: ***********************************

    ✅ DepositReceived


crowdnode balance 
Selected default staking key ##MYCROWDNODEADDRESS##

Staking keys: (in ~/.config/crowdnode/keys/)

|                                    |   🔑 Holdings |   🪧  Stakings |   💸 Earnings |
| ---------------------------------: | ------------: | ------------: | ------------: |
| ##MYCROWDNODEADDRESS## | Đ  0.00089 | Đ  0.5039 | Đ  0.00000809 |
|                                    |               |               |               |
|                             Totals | Đ  0.00089 | Đ  0.5039 | Đ  0.00000809 |

NOTE: I suggest to add an indicator between the point of entering your password and the ✅ DepositReceived notfication. For me it took several seconds and I wasn't sure if something went wrong but waited some more and it worked. Maybe just dots to indicate action is still taking place or a spinner?

Lol, Dash is awesomely weird. Both my deposit tx's to my intermediary wallet, and the crowdnode deposits all were instantly confirmed by InstantSend several minutes before they even appeared on the blockexplorer.
Dash + Crowdnode FTW

Cudos for asking for the password over and over, I kept fumbling this one:

crowdnode passphrase
Enter (current) passphrase: ***********************************
incorrect passphrase
Enter (current) passphrase: ***********
incorrect passphrase
Enter (current) passphrase: ***********
incorrect passphrase
Enter (current) passphrase: ***********************************
incorrect passphrase
Enter (current) passphrase: ***********************************

Enter (new) passphrase: ***********
Enter passphrase again: ***********

Backing up previous (encrypted) keys:
  ~/.config/crowdnode/keys.2023-03-17_14.24.58.bak

Encrypting...

🔑 ##MYCROWDNODEADDRESS##

Done 🔐

Tested decrypting and encrypting keys perfectly:

crowdnode decrypt 
Enter passphrase: ***********


Decrypting...

🔓 ##MYCROWDNODEADDRESS##

Done ✅



crowdnode encrypt
Enter (new) passphrase: ***********
Enter passphrase again: ***********
Encrypting...

🔑 ##MYCROWDNODEADDRESS##

Done 🔐
crowdnode delete ##MYCROWDNODEADDRESS##
Checking CrowdNode API... (hotwallet ##CROWDNODEHOTWALLETADDRESS##)

Error: ##MYCROWDNODEADDRESS##
    still has a balance of 89 (Đ0.00089)
    (transfer to another address before deleting)

Summary:
The app functioned mostly as expected. With the keys imported and set as default it was very easy to use. The only other real issues were the minimum amount that you can send after the initial setup of the account with 0.5Đ and minor documentation tweaks.

Nice work!

CRITICAL: Node v18 drops RIPEMD160

This is going to be very short-lived unless we update (or replace 😈) dashcore-lib due to Node v18+ adopting libssl3 and dropping many deprecated algos, including RIPEMD160, which is used for P2PKH (payment addresses).

Obviously we can't fix DashCore, but we can get a pure JS implementation of RIPEMD160 - though we should probably propose an adoption strategy for secure payment addresses so that we can one day deprecate the current version.

crowdnode stake - one command to rule them all!

Roll all of these into one command: stake:

crowdnode generate
crowdnode load
crowdnode signup
crowdnode accept
crowdnode deposit

Also needs an init command that conditionally generates a key

crowdnode init

This should replace generate for most cases.

QA Task 2 Reviews

This issue is for QA task 2 on Trello

This is similar in nature to QA task 1, but reduced in scope.

Task Steps

To complete your QA review do the following:

  1. Follow the README instructions to install crowdnode (including prerequisites).
  2. Run either the QuickStart or the Step-by-step method to stake at least 0.5 DASH on CrowdNode using this CLI.
  3. Comment below stating any problems, suggestions, etc, or just comment with your overall experience and whether or not you were able to successfully stake your Dash.
  4. Claim your reward on the Trello CrowdNode bounty card similar to Rion's claim

ZephiraReview crowdnode cli

Dear. The CLI tool installed with no issues on Ubuntu 20.04.3 LTS Server.
I used ansible to provision the requirements (nodeJS) on a VM.
I have no problems to report. Everything went smooth and is straightforward.

Will test the withdrawal function in a few weeks.

cli-staking

CROWDNODE CLI REVIEW

ENVIRONMENT USED:
Windows 10
NODE JS V18.0
The process to stake 0.5 went smooth and as explained on the cli readme.
I faced no issue at all while installing, depositing or staking.

final QA2 F

Crownode Trustless on Testnet QA report

Here is a report on my experience testing the Crowdnode Trustless Staking Service.

I was able to perform most of the steps without issue, all the way from depositing 100 tDash, pledging it, signing the appropriate messages and confirmation that the shared masternode has been spun up. I did this again with 800 tĐ on another pooled masternode as well.

  1. The first minor issue I encountered was before I had deposited my Dash and pledged it. The progress bar indicating the number of pledged Dash in operation was fully green but stated that 1100/1000 was already pledged. It was strange to me that it was 1100/1000 as I would have thought a new masternode should have been spun up at 1000/1000. Is this some backend bug or process that fell behind on testnet?

  2. Then once I had deposited my 100 tĐ, and pledged it, the bar stayed on 1100/1000, but at the end of the progress bar it had expanded with a blue section with some text in it. I could not clearly read the text but highlighting and copying it showed that it said "Missing Signature". I have attached a GIF of this in action showing a pulsing blue bar with "Missing Signature" wrapped on top of each other so that they were not fitting into the bar. Minior UI bug here.
    Missing Signature

  3. Once I had gone through the rest of the steps of signing the required messages the progress bar updated to show all green again but with 1200/1000 pledged. I waited some time to see if this changed but after about an hour it did not. At this point I posted this result in the Crowdnode discord channel, and although I didn't get a response something happened and the process continued. The site now stated that the final signing steps must be performed by all parties. I'm not sure what is going on in the background at this point. Are there some manual steps to be performed by Crowdnode admins? Was this just testnet bug? After I was done there was still 200/1000 dash available.

  4. During the several singing steps I noticed that while some parts of the site would auto-refresh the signing verification process only showed: "Your approval signing status is: Pending backend validation" while a new refreshed window would show that validation has already passed. Since this step only takes a minute I would suggest having the status auto update so that the user doesn't have to refresh the whole page.

  5. While the "step by step process" links placed by Crowdnode are very detailed I still got caught by the "Unable to sign input, invalid stack size (possibly missing key)" error from the transaction signing steps. Maybe add that alert in the "Sign refund transaction" window as well as in the docs? Also what is the reason for this error from the core wallet? Can we share some more depth to why this error comes from the transaction signing process and why it can be ignored? This could be added to the docs.

  6. A day later I received an email alert that the process has completed and the new shared masternode has been spun up. Success! Mostly very straight forward process if you know how to use the core wallet, the steps are really detailed which, for someone who has never done this before, was easy to perform.

  7. Since there was still 200/1000 tĐ pledged, I now tried to pledge more and deposit 800 tĐ. I noticed that more of the pledge amount buttons are available now (100/200/300/400 etc) but I don't really know what my balance is on this screen. I would suggest adding a box to show the user's balance so they can make an informed pledging decision.

  8. After pledging 800tĐ I now see that the progress bar more clearly displays "Missing signature" in blue as there is more space.

  9. After I entered the pubkey, the screen refreshed and instead showed the 1st pledge tab which confused me until I realised I had to click the "2" tab. In fact each time I performed another step, like submit a signed message, it again refreshed back to tab 1.

  10. It now stated 1000/1000 tĐ pledged and status is "Waiting on pledges from other members". And after one night it changed to "Create masternode funding transaction" which was in the same box as the previous message, which kind of hides some of the steps going on in the background. Is that intentional?

  11. I also broadcasted the emergency refund transaction for the first pledge and INSTANTANEOUSLY received my 100 tĐ minus the penalty back in my custodial wallet. Wow it was fast. However there was no indication on the site that anything changed. After about 5 minutes the 1st pledged tab disappears and I'm left with just my 2nd pledge screen and in the TXs list I see my refund. Have not received any email notifications yet though. Perhaps adding some more automated communications and notices here would help?

At this point my 2nd pledge moved along and waiting on other users to sign their transactions, I will leave this pledge to run it's course.

I'm quite impressed with this setup, though it is complicated and you need to know what you are doing. The average user won't do this (which is what the trusted crowdnode service is for) but the above average blockchain enthusiast will without an issue. Some minor UI issues and processes that can be cleaned up but overall great work from Crowdnode. More work can be done to make the overall process smoother but I believe this would entail work from both Core Wallet Team and Crowdnode to achieve.

Allow splitting of keys to cap balances

I may have Đ200.0 to stake, but I only want to stake Đ25 per key.

  • Use mnemonic to generate keys
  • Cap at X and split balance among Math.ceil(Total/X.01) keys
  • Stake each key

v1.0.7 Release Notes

  • security update from dashcore-lib update
  • compatibility with node v18 from dashcore-lib update

Version Information

Might make sense to have the one or more of the following version-related things:

  1. A command or flag to return the current crowdnode-cli version.
  2. A notification of some sort when an updated version is available.
  3. A command to update the CLI

Thoughts @coolaj86?

discuss: tutoring people on the command line

Maybe add a step how to open up a terminal for people who don't know what they're doing.

One of the beauties of the command line is that it's great for automating and scripting things that you do often.

Teaching people how who don't know how to open a Terminal how to do everything from scratch for the first time I think falls outside the scope of this project.

If they're on Windows, they could use cmd.exe, but that will likely not work. You could ask them to download Microsoft Terminal from the Windows Store, but then you have to teach them the differences between cmd and PowerShell. You could ask them to https://webinstall.dev/wsl (which is why I created it - to help people learn to program in a normal environment without having to learn all of the ins and outs of Windows first), but...

It's a rabbit hole.

If you have an idea of how to solve this, feel free. I don't feel like I'm the right person to take that on because my mind gets all jumbled up around first principles, I get analysis paralysis and a year later I still don't have so much as a "how to get started as a developer" mini course.

My thought on this wasn't to try to convert people to the command line, but rather to make an excellent tool for developers and power users that they can inspect and see how the pieces come together, and built scripts to do what they want.

Granted, the current CLI code fails at that because it became too complicated, but the SDK hits the spot, I believe.

doc: wording on sending to staking key

Re: #9 (comment)

Fewer words the better.

I can count on my hands the number of times I've witnessed people reading what's on their screen. Those people are all making 6+ figure incomes.

How about this?

Send Đ{effectiveDash} to your staking key via the QR above, or its address:
{addr}
(this key will be used to fund and control your CrowdNode account)

I think that's a whole line too long. I don't know that this program should really be the educational material about how the process works in fine detail.

I think that may be better left to a blog.

Can we figure out a way to reduce the information rather than increase it?

bug: Show balance check _after_ signup

Re: #9 (comment)

It's confusing for a user to see their CrowdNode balance as 0 during the staking process.

This is a bug as a result of using the wrong function to check the balance prior to staking. The balance check will be moved after staking.

stake multiple keys at once

If there are multiple keys with a balance, all staking multiple

  • crowdnode stake Xa Xb Xc Xd
  • crowdnode stake --all

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.