Skip to content

Setting up Liquidity Provider (LP) Node

Satinder Grewal edited this page Jun 8, 2017 · 23 revisions

Prerequisites

Hardware

Minimum specs:

  • 2 (virtual) cores
  • 4GB RAM
  • 200 GB HDD (HDD because the bitcoin blockchain size is currently ~150 GB).

Recommended hardware specs:

  • Hired (virtual) server in a data center with fast network and direct network accessibility (no NAT)
  • 4 (virtual) cores
  • 12GB RAM
  • 400 GB HDD for long-term and storing more blockchains locally

Software

The software currently works only on Linux.

You must have synchronized full nodes of the following cryptocurrencies installed and running on your system:

Besides your usual security measures, you have to open several potentially firewalled ports so as they can accept incoming connections. 7770 (komodo node), 7775 (iguana), 8333 (bitcoin).

External services

  • Bittrex.com account with activated API key. LP node will put funds on both Centralised Exchange and on it's local wallet to gain more liquidity.
  • Blocktrail.com account with activated API key. It is needed for querying blockchain data from explorer. No funds needed to be in Blocktrail.com. Basilisk needs to query explorer level data which is not available locally, and neither the notary nodes have them. So, in this case Blocktrail.com API is used to query explorer level data ONLY.

Coin supply

  • A Bitcoin address with an accessible balance. example. 0.2 BTC
  • A Komodo address with an accessible balance. example. 200 KMD

WARNINGS

  • This server must NOT be set up as a Notary Node. Never use a Notary Node as a LP node.
  • For security, do not use a general purpose BTC/KMD/etc address that contains significant funds.

Installing Liquidity Provider (LP) Node on Ubuntu/Debian System

Liquidity Provider (LP) node is using the same iguana daemon codebase which is used at many other places like Notary Nodes, Agama Wallet and such.

For Liquidity Provider we'll need to compile iguana daemon & marketmaker daemon with Market Maker capabilities.

Setting up SuperNET/Iguana.

Log in as the user to your system, and issue these commands to make sure your Linux machine is up to date.

sudo apt-get update
sudo apt-get upgrade (and say Y when it wants to upgrade stuff)

Install the dependency packages:

sudo apt-get install build-essential pkg-config libc6-dev m4 \
		g++-multilib autoconf libtool ncurses-dev unzip git python \
		zlib1g-dev wget bsdmainutils automake libboost-all-dev \
		libssl-dev libprotobuf-dev protobuf-compiler libqt4-dev \
		libqrencode-dev libdb++-dev ntp ntpdate vim software-properties-common \
		curl libcurl4-gnutls-dev cmake clang

Some Linux machines are now providing nanomsg package version 1.0. If it is available via package manager, you can install it from there. Else, you should use github repo of nanomsg and compile it yourself.

For Ubuntu 14.04 you need to install it yourself

cd /tmp
wget https://github.com/nanomsg/nanomsg/archive/1.0.0.tar.gz -O nanomsg-1.0.0.tar.gz
tar -xzvf nanomsg-1.0.0.tar.gz
cd nanomsg-1.0.0
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr
cmake --build .
sudo cmake --build . --target install
sudo ldconfig

Or the following for 16.04

git clone https://github.com/nanomsg/nanomsg
cd nanomsg
cmake .
make
sudo make install
sudo ldconfig

Time to compile iguana daemon from SuperNET github repo

cd ~
git clone https://github.com/jl777/SuperNET
cd SuperNET/iguana
git checkout dev
./m_LP

This will compile iguana daemon and place it under ~/SuperNET/agents/iguana. To start iguana daemon follow these exact steps:

cd ~/SuperNET/iguana/
../agents/iguana

Make sure to follow the above steps exactly to start iguana daemon properly. Once you see output like below iguana is ready and serving it's API on http://127.0.0.1:7778 or http://localhost://7778

>>>>>>>>>> iguana_rpcloop 127.0.0.1:7778 bind sock.17 iguana API enabled <<<<<<<<<
mainloop

Setup link between iguana, KMD and BTC

Link between these three is that iguana API starts talking to Native Komodo RPC and Native Bitcoin RPC.

This let iguana and marketmaker do transaction and OP Script operations.

So, in this sense, iguana and marketmaker are basically working as external Smart Contract daemon.

To start BTC passthru link between iguana and Native Bitcoin RPC do these steps:

cd ~/SuperNET/iguana/coins
./btc

To start KMD passthru link between iguana and Native Komodo RPC do these steps:

cd ~/SuperNET/iguana/coins
./kmd

Now we are ready for next step.

Time to compile Market Maker

Keep iguana daemon running in separate window, and open a new Terminal window and follow these steps:

cd ~
cd SuperNET/iguana
git checkout dev
./m_mm

This will compile marketmaker daemon which you can find in ~/SuperNET/iguana/marketmaker.

Making your wallets ready

With DEX Client and DEX LP node, you should use a new wallet passphrase for this testing, and doing so will include steps to get the privkeys of the addresses from this new wallet and importing them to your Komodo, Bitcoin and Assetchain wallets. And then fund these addresses with some funds to be ready.

First thing is gettig privkey/wifkey of your wallet's addresses. For that I assume you have iguana daemon already running as mentioned in earlier steps. Now execute this following curl command in linux terminal to get the output with your wallet's main address and it's privkey:

# In this example I used the passphrase "your very long passphrase". replace it with your own unique passphrase
curl --url "http://127.0.0.1:7778" --data "{\"coin\":\"KMD\",\"agent\":\"bitcoinrpc\",\"method\":\"encryptwallet\",\"passphrase\":\"your very long passphrase here\"}"

This will result in following JSON output:

{
  "pubkey": "0c7fea2075c428a69a86df4d45360afe5c8adcadeee9204ed6c5f2b18511a912",
  "RS": "NXT-2F22-TWB8-ZMZG-68YMR",
  "NXT": "5462803465692525568",
  "btcpubkey": "0386c7c588014b9c5554d4229f452c45bfd1476300efd3c28ac147fff803ea7f53",
  "rmd160": "c610ab0802643c453dd78bb252fb8478dfded61c",
  "KMD": "RTLTqcnMqMmiVDNiRD71b6oHQvATTgV4U8",
  "BTC": "1K4Gm6u5EXy9RD1Wx37tVaU5eehrtvSEkf",
  "JUMBLR": "RTLTqcnMqMmiVDNiRD71b6oHQvATTgV4U8",
  "REVS": "RTLTqcnMqMmiVDNiRD71b6oHQvATTgV4U8",
  "result": "success",
  "handle": "",
  "persistent": "0c7fea2075c428a69a86df4d45360afe5c8adcadeee9204ed6c5f2b18511a912",
  "status": "unlocked",
  "duration": 3600,
  "privkey": "38bb9c8695dbf2421b88aa67ea3c3326c88bbe6b21b3f642bb6174e6807bf160",
  "KMDwif": "UqupoW6P857JhmzjNnEEJN81rGUTTt3nweZvbLQZ2FEBmneZQ4F8",
  "BTCwif": "Ky7zVpUQcr94EjCeCEYeXvSnvCRKNmnBB9C725csZY1UsvjYUR56",
  "tag": "445121851597586507"
}

In the above example output your KMD and BTC addresses, and their privkeys are:

"KMD": "RTLTqcnMqMmiVDNiRD71b6oHQvATTgV4U8"
"KMDwif": "UqupoW6P857JhmzjNnEEJN81rGUTTt3nweZvbLQZ2FEBmneZQ4F8"

"BTC": "1K4Gm6u5EXy9RD1Wx37tVaU5eehrtvSEkf"
"BTCwif": "Ky7zVpUQcr94EjCeCEYeXvSnvCRKNmnBB9C725csZY1UsvjYUR56"

Importing and validating your KMD and BTC addresses to Native Wallets

Now that you have the main addresses linked to your passphrase/seed, you can use the privkeys to import them to your Native Wallets.

To import privkey to Komodo:

komodo-cli importprivkey "UqupoW6P857JhmzjNnEEJN81rGUTTt3nweZvbLQZ2FEBmneZQ4F8"

To import privkey to Bitcoin:

bitcoin-cli importprivkey "UqupoW6P857JhmzjNnEEJN81rGUTTt3nweZvbLQZ2FEBmneZQ4F8"

To import privkey to and Assetchain like REVS:

komodo-cli -ac_name=REVS importprivkey "UqupoW6P857JhmzjNnEEJN81rGUTTt3nweZvbLQZ2FEBmneZQ4F8"

In case you don't have REVS assetchain running, you can go to SuperNET directory and see example scripts:

cd SuperNET/iguana/coins/
$ cat revs

~/komodo/src/komodod -ac_name=REVS -ac_supply=1300000 -addnode=78.47.196.146 &
curl --url "http://127.0.0.1:7778" --data "{\"conf\":\"REVS.conf\",\"path\":\"${HOME#"/"}/.komodo/REVS\",\"unitval\":\"20\",\"zcash\":1,\"RELAY\":-1,\"VALIDATE\":0,\"prefetchlag\":-1,\"poll\":100,\"active\":1,\"agent\":\"iguana\",\"method\":\"addcoin\",\"startpend\":4,\"endpend\":4,\"services\":129,\"maxpeers\":8,\"newcoin\":\"REVS\",\"name\":\"REVS\",\"hasheaders\":1,\"useaddmultisig\":0,\"netmagic\":\"905c3498\",\"p2p\":10195,\"rpc\":10196,\"pubval\":60,\"p2shval\":85,\"wifval\":188,\"txfee_satoshis\":\"10000\",\"isPoS\":0,\"minoutput\":10000,\"minconfirms\":2,\"genesishash\":\"027e3758c3a65b12aa1046462b486d0a63bfa1beae327897f56c5cfb7daaae71\",\"protover\":170002,\"genesisblock\":\"0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a000000000000000000000000000000000000000000000000000000000000000029ab5f490f0f0f200b00000000000000000000000000000000000000000000000000000000000000fd4005000d5ba7cda5d473947263bf194285317179d2b0d307119c2e7cc4bd8ac456f0774bd52b0cd9249be9d40718b6397a4c7bbd8f2b3272fed2823cd2af4bd1632200ba4bf796727d6347b225f670f292343274cc35099466f5fb5f0cd1c105121b28213d15db2ed7bdba490b4cedc69742a57b7c25af24485e523aadbb77a0144fc76f79ef73bd8530d42b9f3b9bed1c135ad1fe152923fafe98f95f76f1615e64c4abb1137f4c31b218ba2782bc15534788dda2cc08a0ee2987c8b27ff41bd4e31cd5fb5643dfe862c9a02ca9f90c8c51a6671d681d04ad47e4b53b1518d4befafefe8cadfb912f3d03051b1efbf1dfe37b56e93a741d8dfd80d576ca250bee55fab1311fc7b3255977558cdda6f7d6f875306e43a14413facdaed2f46093e0ef1e8f8a963e1632dcbeebd8e49fd16b57d49b08f9762de89157c65233f60c8e38a1f503a48c555f8ec45dedecd574a37601323c27be597b956343107f8bd80f3a925afaf30811df83c402116bb9c1e5231c70fff899a7c82f73c902ba54da53cc459b7bf1113db65cc8f6914d3618560ea69abd13658fa7b6af92d374d6eca9529f8bd565166e4fcbf2a8dfb3c9b69539d4d2ee2e9321b85b331925df195915f2757637c2805e1d4131e1ad9ef9bc1bb1c732d8dba4738716d351ab30c996c8657bab39567ee3b29c6d054b711495c0d52e1cd5d8e55b4f0f0325b97369280755b46a02afd54be4ddd9f77c22272b8bbb17ff5118fedbae2564524e797bd28b5f74f7079d532ccc059807989f94d267f47e724b3f1ecfe00ec9e6541c961080d8891251b84b4480bc292f6a180bea089fef5bbda56e1e41390d7c0e85ba0ef530f7177413481a226465a36ef6afe1e2bca69d2078712b3912bba1a99b1fbff0d355d6ffe726d2bb6fbc103c4ac5756e5bee6e47e17424ebcbf1b63d8cb90ce2e40198b4f4198689daea254307e52a25562f4c1455340f0ffeb10f9d8e914775e37d0edca019fb1b9c6ef81255ed86bc51c5391e0591480f66e2d88c5f4fd7277697968656a9b113ab97f874fdd5f2465e5559533e01ba13ef4a8f7a21d02c30c8ded68e8c54603ab9c8084ef6d9eb4e92c75b078539e2ae786ebab6dab73a09e0aa9ac575bcefb29e930ae656e58bcb513f7e3c17e079dce4f05b5dbc18c2a872b22509740ebe6a3903e00ad1abc55076441862643f93606e3dc35e8d9f2caef3ee6be14d513b2e062b21d0061de3bd56881713a1a5c17f5ace05e1ec09da53f99442df175a49bd154aa96e4949decd52fed79ccf7ccbce32941419c314e374e4a396ac553e17b5340336a1a25c22f9e42a243ba5404450b650acfc826a6e432971ace776e15719515e1634ceb9a4a35061b668c74998d3dfb5827f6238ec015377e6f9c94f38108768cf6e5c8b132e0303fb5a200368f845ad9d46343035a6ff94031df8d8309415bb3f6cd5ede9c135fdabcc030599858d803c0f85be7661c88984d88faa3d26fb0e9aac0056a53f1b5d0baed713c853c4a2726869a0a124a8a5bbc0fc0ef80c8ae4cb53636aa02503b86a1eb9836fcc259823e2692d921d88e1ffc1e6cb2bde43939ceb3f32a611686f539f8f7c9f0bf00381f743607d40960f06d347d1cd8ac8a51969c25e37150efdf7aa4c2037a2fd0516fb444525ab157a0ed0a7412b2fa69b217fe397263153782c0f64351fbdf2678fa0dc8569912dcd8e3ccad38f34f23bbbce14c6a26ac24911b308b82c7e43062d180baeac4ba7153858365c72c63dcf5f6a5b08070b730adb017aeae925b7d0439979e2679f45ed2f25a7edcfd2fb77a8794630285ccb0a071f5cce410b46dbf9750b0354aae8b65574501cc69efb5b6a43444074fee116641bb29da56c2b4a7f456991fc92b2\",\"debug\":0,\"seedipaddr\":\"78.47.196.146\"}"

The above example displays the script revs content which starts the REVS assetchain using komodod daemon. If your komodod daemon's path is different, then edit this file and use different path.

After editing and making sure the paths are correct, execut it

cd SuperNET/iguana/coins/
./revs

This should start the assetchain and also link it to iguana so that iguana can talk to this Assetchain's RPC.

You can find more examples of the assetchains in same coins directory and edit them accordingly, and start those assetchains.

Ready to start Market Maker

cd SuperNET/iguana/exchanges

Edit the file randval there and change it's value to your passphrase.

export randval="your long passphrase here"

Save the file after updating your wallet passphrase.