Creating a Smart Chain on a Single Node
Under most circumstances, a developer should use two separate nodes to set up and create a Smart Chain.
However, occasionally a developer may need to create a Smart Chain on a single node. This can be achieved using the testnode runtime parameter. The following tutorial is only neccesary if the developer desires to run two instances of the daemon on the same server.
In this situation, the developer may create a Smart Chain by running two daemons with slightly different configurations on the same node.
- Komodo Smart Chain software installed on a compatible machine
Select the desired Antara customization parameters.
Link to Antara Customization Parameters
For this example, we use simple configurations.
./komodod -ac_name=HELLOWORLD -ac_supply=777777
If you want the Smart Chain to have Antara Modules enabled, please include the -ac_cc parameter with the required value in your launch parameters on both the daemons.
Search for the part of the response that begins with this string: >>>>>>>>>
>>>>>>>>>> HELLOWORLD: p2p.14165 rpc.14166 magic.01362c2a 20327466 777777 coins
The default p2p and rpc ports of our chain are 14165
and 14166
respectively.
To interact with this first daemon, use a komodo-cli
command as follows.
./komodo-cli -ac_name=HELLOWORLD getinfo
Create a directory on your machine for the second daemon.
In this guide, we use a directory named coinData
in the Home directory:
mkdir ~/coinData
Create the data directory for the second daemon.
mkdir ~/coinData/HELLOWORLD
Copy the .conf
file created for the first daemon to this new data directory.
cp ~/.komodo/HELLOWORLD/HELLOWORLD.conf ~/coinData/HELLOWORLD/
Change the values of rpcuser
, rpcpassword
, and rpcport
in the file ~/coinData/HELLOWORLD/HELLOWORLD.conf
.
rpcuser=changethis
rpcpassword=changethis
... (ommitted) ...
rpcport=12345
(Change all values shown above on the right side of the =
side. In all values above, the chosen values must be different from the values in the first daemon's .conf file.)
Add a new line port=<choose a port number betwen 1 and 65000>
to the file. This value indicates the p2pport used by the second daemon.
... (file continued) ...
port=22020
The value of port should be different from the value of the p2p port for the first daemon.
When launching the second daemon, use the same Antara customization parameters as the first daemon.
However, now we specify the data directory for the daemon, as well as the p2p
connection.
To accomplish this, we use the datadir and addnode common launch parameters.
./komodod -ac_name=HELLOWORLD -ac_supply=777777 -datadir=/home/<USERNAME>/coinData/HELLOWORLD -addnode=localhost
Replace <USERNAME>
with the USERNAME for your local node. You can find this value by using the echo $USER
command in the terminal.
To interact with the second daemon, add the datadir parameter to the komodo-cli
command:
./komodo-cli -ac_name=HELLOWORLD -datadir=/home/<USERNAME>/coinData/HELLOWORLD getinfo
After launching the second daemon, calling getinfo
to either of the daemons should report "connections":1
.
To issue a getinfo
call using curl, observe the following example.
Replace <rpcuser>
, <rpcpassword>
, <rpcport>
with the values from the .conf
file in the data directory corresponding to the daemon that needs to be queried.
curl -s --user <rpcuser>:<rpcpassword> --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getinfo", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:<rpcport>/
Alternatively, source the .conf
file before using the curl command. Each time you desire to switch daemons, source the .conf
file of your target daemon.
# Source the .conf file
source ~/.komodo/HELLOWORLD/HELLOWORLD.conf
# Execute the curl command
curl -s --user $rpcuser:$rpcpassword --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getinfo", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:$rpcport/
# Source the .conf file
source ~/coinData/HELLOWORLD/HELLOWORLD.conf
# Execute the curl command
curl -s --user $rpcuser:$rpcpassword --data-binary '{"jsonrpc": "1.0", "id": "curltest", "method": "getinfo", "params": []}' -H 'content-type: text/plain;' http://127.0.0.1:$rpcport/