KDX is a dedicated desktop process manager for Kaspa node.
KDX offers a miniature console using which user can re-build the Kaspa stack, upgrading Kaspa to the latest version directly from GitHub. The build process is automated via a series of scripts that, if
needed, fetch required tools (git, go, gcc) and build Kaspa on the host computer (the build includes various Kaspa utilities including txgen, wallet, kaspactl and others and can be executed against any specific Git branch). KDX console can also be used to migrate Kasparov database if building a version with an updated database schema.
KDX process configuration (available via a simple JSON editor) allows user to specify command-line arguments for executables, as such it is possible to configure KDX to run multiple instances of Kaspa or potentially run multiple networks simultaneously (provided Kaspa nodes do not pro-actively auto-discover each-other)
Like many desktop applications, KDX can run in the tray bar, out of the way.
KDX is built using NWJS and is compatible Windows, Linux and Mac OS X.
- Node.js 14.0.0+
- Emanator -
npm install emanator@latest - Rust (latest, used for building kaspa miner at https://github.com/aspectron/kaspa-miner)
- Cuda linraries for kaspa miner (depends on the platform)
NOTE: KDX build process builds and includes latest Kaspa binaries from Git master branches.
To build from specific branches, you can use --branch... flags (see below).
npm install emanator@latest
git clone git@github.com:aspectron/kdx
cd kdx
# run emanate with one or multiple flags below
# --portable create a portable zipped application
# --innosetup generate Windows setup executable
# --dmg generate a DMG image for Mac OS X
# --all generate all OS compatible packages
# following flags can be used to reset the environment
# --clean clean build folders: purges cloned `GOPATH` folder
# --reset `--clean` + deletes downloaded/cached NWJS and NODE binaries
emanate [--portable | --innosetup | --dmg | --all]
DMG - Building DMG images on Mac OS requires sudo access in order to use system tools such as diskutil to generate images:
sudo emanate --dmg
To build the windows portable deployment, run the following command:
emanate --portable
To build the Windows installer, you need to install Innosetup and run:
emanate --innosetup
Emanator stores build files in the ~/emanator folder
In addition to Node.js, please download and install Latest NWJS SDK https://nwjs.io - make sure that nw executable is available in the system PATH and that you can run nw from command line.
On Linux / Darwin, as good way to install node and nwjs is as follows:
cd ~
mkdir bin
cd bin
#node - (must be 14.0+)
wget https://nodejs.org/dist/v14.4.0/node-v14.4.0-linux-x64.tar.xz
tar xvf node-v14.4.0-linux-x64.tar.xz
ln -s node-v14.4.0-linux-x64 node
#nwjs
wget https://dl.nwjs.io/v0.46.2/nwjs-sdk-v0.46.2-linux-x64.tar.gz
tar xvf nwjs-sdk-v0.46.2-linux-x64.tar.gz
ln -s nwjs-sdk-v0.46.2-linux-x64 nwjs
Once done add the following to ~/.bashrc
export PATH = /home/<user>/bin/node/bin:/home/<user>/bin/nwjs:$PATH
The above method allows you to deploy latest binaries and manage versions by re-targeting symlinks pointing to target folders.
Once you have node and nwjs working, you can continue with KDX.
KDX installation:
npm install emanator@latest
git clone git@github.com:aspectron/kdx
cd kdx
npm install
emanate --local-binaries
nw .
--branch argument specifies common branch name for kaspa and kasparov, for example:
emanate --branch=v0.4.0-dev
The branch for each repository can be overriden using --branch-<repo-name>=<branch-name> arguments as follows:
emanate --branch=v0.4.0-dev --branch-kaspad=v0.3.0-dev
emanate --branch-miningsimulator=v0.1.2-dev
NOTE: KDX build command in KDX console operates in the same manner and accepts --branch... arguments.
KDX runtime configuration is declared using a JSON object.
Each instance of the process is declared using it's type (for example: kaspad) and a unique identifier (kd0). Most process configuration objects support args property that allows
passing arguments or configuration options directly to the process executable. Depending on the process type, the configuration is passed via command line arguments (kasparov*) or configuration file (kaspad).
Supported process types:
kaspad- Kaspa full nodekaspaminer- Kaspa sha256 miner
NOTE: For Kaspa, to specify multiple connection endpoints, you must use an array of addresses as follows: "args" : { "connect" : [ "peer-addr-port-a", "peer-addr-port-b", ...] }
{
"kaspad:kd0": {
"args": {
"rpclisten": "0.0.0.0:16210",
"listen": "0.0.0.0:16211",
"profile": 7000,
"rpcuser": "user",
"rpcpass": "pass"
}
},
"kaspad:kd1": {
"args": {
"rpclisten": "0.0.0.0:16310",
"listen": "0.0.0.0:16311",
"profile": 7001,
"connect": "0.0.0.0:16211",
"rpcuser": "user",
"rpcpass": "pass"
}
},
"simulator:sim0": {
"blockdelay" : 2000,
"peers": [ "127.0.0.1:16310" ]
},
"pgsql:db0": {
"port": 18787
},
"mqtt:mq0": {
"port": 18792
},
"kasparovsyncd:kvsd0": {
"args": {
"rpcserver": "localhost:16310",
"dbaddress": "localhost:18787"
"mqttaddress": "localhost:18792",
"mqttuser" : "user",
"mqttpass" : "pass"
}
},
"kasparovd:kvd0": {
"args": {
"listen": "localhost:11224",
"rpcserver": "localhost:16310",
"dbaddress": "localhost:18787"
}
}
}KDX stores it's configuration file as ~/.kdx/config.json. Each configured process data is stored in <datadir>/<process-type>-<process-identifier> where datadir is a user-configurable location. The default datadir location is ~/.kdx/data/. For example, kaspad process with identifier kd0 will be stored in ~/.kdx/data/kaspad-kd0/ and it's logs in ~/.kdx/data/kaspad-kd0/logs/kaspad.log
KDX can run Kaspa from 2 locations - an integrated bin folder that is included with KDX redistributables and ~/.kdx/bin folder that is created during the Kaspa build process.
KDX Console provides following functionality:
- Upgrading kasparov using
migratecommand startandstopcontrols stack runtime- Kaspad RPC command execution
- Use of test wallet app (KDX auto-configures kasparov address)
- Rebuilding Kaspa software stack from within the console
Kaspad RPC can be accessed via KDX Console using the process identifier. For example:
$ kd0 help
$ kd0 getinfo
Note that RPC methods are case insensitive.
To supply RPC call arguments, you must supply and array of JSON-compliant values (numbers, double-quote-enclosed strings and 'true'/'false'). For example:
$ kd0 getblock "000000b22ce2fcea335cbaf5bc5e4911b0d4d43c1421415846509fc77ec643a7"
{
"hash": "000000b22ce2fcea335cbaf5bc5e4911b0d4d43c1421415846509fc77ec643a7",
"confirmations": 83,
"size": 673,
"blueScore": 46241,
...
}