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
migrate
command start
andstop
controls 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,
...
}