Coin Activation
There are two methods of coin activation:
enable
- Connects to a native daemon, or a url which handles RPCs for Platform coins (e.g. ETH, MATIC, FTM, BNB, ONE)electrum
- Connects to an electrum server for UTXO based coins and QTUM/QRC20 tokens.
A coin can only be activated once per session, and must be activated before it can be used in trading or wallet functions.
The Komodo DeFi Framework API requires an mm2
parameter to be set for each coin
. This can be added to the enable/electrum command, or defined in your coins file.
The value of the mm2
parameter informs the software as to whether the coin
is expected to be compatible for atomic swaps.
0
=non-compatible
1
=compatible
Many examples of activation commands are available at kmd.stats.io
If you are running a UTXO based coin daemon locally and the blockchain is synchronised, you can connect the local daemon to the Komodo DeFi Framework API by using the enable
method, though some additional configuration is required. The Komodo DeFi Framework API requires the following options to be added to the native chain's .conf file.
logevents=1
txindex=1
addressindex=1
The Komodo DeFi Framework API node's coin address needs to be imported manually into the coin daemon using the importaddress method.
Activating coins in 'lite mode' means you don't need to have a native coin daemon installed, or keep a local blockchain synchronised. In this mode, the Komodo DeFi Framework API communicates with an external node to perform transactions and query the blockchain. UTXO based coins and QTUM/QRC20 tokens communicate via electrum servers, while other platform coins communicate via JSON RPC urls.
Komodo DeFi Framework is a true cross chain, cross protocol Decentralized Exchange (DEX), allowing for trades between coins and tokens across many platforms and ecosystems, such as:
- UTXO based coins (e.g. DOGE, BTC, BCH, KMD, ZEC, LTC, DASH, DGB)
- Ethereum (ETH) & ERC20 tokens
- Binance Coin (BNB) & BEP20 tokens
- QTUM & QRC20 tokens
- Polygon (MATIC) & PLG20 tokens
- Harmony (ONE) & HRC20 tokens
- Fantom (FTM) & FTM20 tokens
- Avalanche (AVAX) & AVX20 tokens
- Moonriver (MOVR) & MVR20 tokens
- And more!
Electrum mode is only available for UTXO based coins and QTUM/QRC20 tokens.
Parameter* = required | Type | Description |
---|---|---|
coin* | string | Ticker of coin to activate |
servers* | list of objects | A list of standard ActivationServers objects. |
fallback_swap_contract | string | Optional. QRC20 only. Address of backup etomic swap smart contract |
max_connected | integer | Optional. Maximum number of electrum servers to maintain an active connection to. If not set, defaults to all servers in activation request. |
min_connected | integer default: 1 | Optional. Minimum number of electrum servers to maintain an active connection to. |
mm2 | integer | Optional. Required if not set in coins file. Informs the Komodo DeFi Framework API whether or not the coin is expected to function. Accepted values are 0 or 1 |
required_confirmations | integer default: 3 | Optional. Number of confirmations for the Komodo DeFi Framework API to wait during the transaction steps of an atomic swap. |
requires_notarization | boolean default: false | Optional. If true , coins protected by Komodo Platform's dPoW security will wait for a notarization before progressing to the next atomic swap transactions step. |
swap_contract_address | string | Optional. QRC20 only. Address of etomic swap smart contract |
utxo_merge_params | object | Optional. A standard UtxoMergeParams object. Used to reduce a wallet's UTXO count in cases where it is causing significantly slower RPC responses. |
Parameter* = required | Type | Description |
---|---|---|
address* | string | the address of the user's coin wallet, based on the user's passphrase |
balance* | string (numeric) | the amount of coin the user holds in their wallet; does not include unspendable_balance |
coin* | string | the ticker of the enabled coin |
required_confirmations* | number | the number of transaction confirmations for which the Komodo DeFi Framework API must wait during the atomic swap process |
requires_notarization* | bool | whether the node must wait for a notarization of the selected coin that is performing the atomic swap transactions; applicable only for coins using Komodo dPoW |
result* | string | the result of the request; this value either indicates success , or an error, or another type of failure |
unspendable_balance* | string (numeric) | the coin balance that is unspendable at the moment (e.g. if the address has immature UTXOs) |
mature_confirmations | number | Optional. the number of coinbase transaction confirmations required to become mature; UTXO coins only |
Electrum Method
{
"coin": "BCH",
"method": "electrum",
"servers": [
{
"url": "bch.electrum3.cipig.net:10055",
"protocol": "TCP"
},
{
"url": "bch.electrum3.cipig.net:20055",
"protocol": "SSL"
},
{
"url": "bch.electrum3.cipig.net:30055",
"protocol": "WSS"
}
],
"min_connected": 1,
"max_connected": 2,
"userpass": "RPC_UserP@SSW0RD"
}
Response (Success)
{
"address": "1DgpBvyeUNHasBt3h3qzC1p9Z8qTgr6t5m",
"balance": "0.12345678",
"required_confirmations": 1,
"requires_notarization": false,
"result": "success"
}
Unable to connect to electrum servers
Response (Connection failed)
{
"error": "All electrum servers for BCH are unavailable"
}
Electrum Method
{
"coin": "KMD",
"method": "electrum",
"servers": [
{
"url": "kmd.electrum3.cipig.net:10001",
"protocol": "TCP"
},
{
"url": "kmd.electrum1.cipig.net:20001",
"protocol": "SSL"
},
{
"url": "kmd.electrum3.cipig.net:20001",
"protocol": "SSL"
}
],
"required_confirmations": 10,
"requires_notarization": true,
"mm2": 1,
"userpass": "RPC_UserP@SSW0RD"
}
Response (Success)
{
"coin": "KMD",
"address": "RQNUR7qLgPUgZxYbvU9x5Kw93f6LU898CQ",
"balance": "762",
"unspendable_balance": "0",
"mature_confirmations": 100,
"required_confirmations": 10,
"requires_notarization": true,
"result": "success"
}
mm2 param is not set in coins config or enable request
Response (Missing mm2 parameter)
{
"error": "lp_coins:943] lp_coins:693] mm2 param is not set neither in coins config nor enable request, assuming that coin is not supported"
}
min_connected should be greater than 0
Response (Invalid min_connected)
{
"error": "rpc:184] dispatcher_legacy:141] lp_commands_legacy:141] lp_coins:4462] utxo_standard:73] utxo_coin_builder:616] Internal error: manager:129] min_connected should be greater than 0"
}
min_connected must be <= max_connected
Response (Invalid connection range)
{
"error": "rpc:184] dispatcher_legacy:141] lp_commands_legacy:141] lp_coins:4462] utxo_standard:73] utxo_coin_builder:616] Internal error: manager:132] min_connected (2) must be <= max_connected (1)"
}
Electrum Method
{
"coin": "QTUM",
"method": "electrum",
"servers": [
{
"url": "qtum.electrum1.cipig.net:20050",
"protocol": "SSL"
},
{
"url": "qtum.electrum2.cipig.net:20050",
"protocol": "SSL"
},
{
"url": "qtum.electrum2.cipig.net:10050",
"protocol": "TCP"
}
],
"swap_contract_address": "0x2f754733acd6d753731c00fee32cb484551cc15d",
"userpass": "RPC_UserP@SSW0RD"
}
Response (Success)
{
"coin": "QTUM",
"address": "QjXkGgoiycYRm2NbiMpkEHuQt7SB9BKHjz",
"balance": "7.77",
"required_confirmations": 3,
"requires_notarization": false,
"unspendable_balance": "0",
"mature_confirmations": 100,
"result": "success"
}
mm2 param is not set in coins config or enable request
Response (Missing mm2 parameter)
{
"error": "lp_coins:943] lp_coins:693] mm2 param is not set neither in coins config nor enable request, assuming that coin is not supported"
}
If mm2 is not set in either the command or your coins
file, you will see the following error:
{
"error": "lp_coins:943] lp_coins:693] mm2 param is not set neither in coins config nor enable request, assuming that coin is not supported"
}
If min_connected is < 1, you will see the following error:
{
"error":"rpc:184] dispatcher_legacy:141] lp_commands_legacy:141] lp_coins:4462] utxo_standard:73] utxo_coin_builder:616] Internal error: manager:129] min_connected should be greater than 0"
}
If max_connected is < min_connected, you will see the following error:
{
"error": "rpc:184] dispatcher_legacy:141] lp_commands_legacy:141] lp_coins:4462] utxo_standard:73] utxo_coin_builder:616] Internal error: manager:132] min_connected (2) must be <= max_connected (1)"
}
Parameter* = required | Type | Description |
---|---|---|
coin* | string | the name of the coin the user desires to enable |
fallback_swap_contract | string | Optional. required for QRC20 only - address of backup etomic swap smart contract |
gas_station_decimals | integer default: 8 | Optional. optional for ETH/ERC20 and other gas model chains - Defines the decimals used to denominate the gas station response to gwei units. For example, the ETH gas station uses 8 decimals, which means that "average": 860 is equal to 86 gwei. While the Matic gas station uses 9 decimals, so 860 would mean 860 gwei exactly. |
gas_station_policy.policy | string default: MeanAverageFast | Optional. optional for ETH/ERC20 and other gas model chains - Defines the method of gas price calculation from the station response. "MeanAverageFast" will use the mean between average and fast fields. "Average" will return a simple average value. |
mm2 | integer | Optional. Required if not set in coins file. Informs the Komodo DeFi Framework API whether or not the coin is expected to function. Accepted values are 0 or 1 |
required_confirmations | integer default: 3 | Optional. Number of confirmations for the Komodo DeFi Framework API to wait during the transaction steps of an atomic swap. |
requires_notarization | boolean default: false | Optional. If true , coins protected by Komodo Platform's dPoW security will wait for a notarization before progressing to the next atomic swap transactions step. |
swap_contract_address | string | Optional. required for QRC20 only - address of etomic swap smart contract |
tx_history | bool | Optional. If true the Komodo DeFi Framework API will preload transaction history as a background process. Must be set to true to use the my_tx_history method |
urls | array of strings | Optional. required for ETH/ERC20 and other gas model chains - urls of Ethereum RPC nodes to which the user desires to connect |
Parameter* = required | Type | Description |
---|---|---|
address* | string | the address of the user's coin wallet, based on the user's passphrase |
balance* | string (numeric) | the amount of coin the user holds in their wallet; does not include unspendable_balance |
coin* | string | the ticker of enabled coin |
required_confirmations* | number | Komodo DeFi Framework API will wait for the this number of coin's transaction confirmations during the swap |
requires_notarization* | bool | whether the node must wait for a notarization of the selected coin that is performing the atomic swap transactions |
result* | string | the result of the request; this value either indicates success , or an error or other type of failure |
unspendable_balance* | string (numeric) | the coin balance that is unspendable at the moment (e.g. if the address has immature UTXOs) |
mature_confirmations | number | Optional. the number of coinbase transaction confirmations required to become mature; UTXO coins only |
Enable Method
{
"userpass": "RPC_UserP@SSW0RD",
"method": "enable",
"coin": "TKL"
}
Response (Success)
{
"coin": "TKL",
"address": "RQNUR7qLgPUgZxYbvU9x5Kw93f6LU898CQ",
"balance": "333",
"required_confirmations": 1,
"requires_notarization": false,
"unspendable_balance": "0",
"mature_confirmations": 100,
"result": "success"
}
Unable to connect to daemon
Response (Connection failed)
{
"error": "Failed to connect to native daemon"
}
{
"userpass": "RPC_UserP@SSW0RD",
"method": "enable",
"coin": "TKL",
"mm2": 1,
"required_confirmations": 10,
"requires_notarization": true
}
Response (Success)
{
"coin": "TKL",
"address": "RQNUR7qLgPUgZxYbvU9x5Kw93f6LU898CQ",
"balance": "777",
"required_confirmations": 10,
"requires_notarization": true,
"unspendable_balance": "0",
"mature_confirmations": 100,
"result": "success"
}
Unable to connect to daemon
Response (Connection failed)
{
"error": "Failed to connect to native daemon"
}
{
"coin": "ETH",
"method": "enable",
"urls": [
"https://eth3.cipig.net:18555",
"https://mainnet.gateway.tenderly.co",
"https://ethereum-rpc.publicnode.com"
],
"swap_contract_address": "0x24ABE4c71FC658C91313b6552cd40cD808b3Ea80",
"fallback_swap_contract": "0x8500AFc0bc5214728082163326C2FF0C73f4a871",
"userpass": "RPC_UserP@SSW0RD"
}
Response (Success)
{
"address": "0x7Bc1bBDD6A0a722fC9bffc49c921B685ECB84b94",
"balance": "12.00283000",
"locked_by_swaps": "0.00000000",
"required_confirmations": 1,
"requires_notarization": false,
"mature_confirmations": 0,
"result": "success"
}
Enable Method
{
"coin": "ETH",
"userpass": "RPC_UserP@SSW0RD",
"method": "enable",
"urls": [
"https://eth3.cipig.net:18555",
"https://0xrpc.io/eth",
"https://eth.drpc.org"
],
"swap_contract_address": "0x24ABE4c71FC658C91313b6552cd40cD808b3Ea80",
"fallback_swap_contract": "0x8500AFc0bc5214728082163326C2FF0C73f4a871",
"gas_station_url": "https://ethgasstation.info/json/ethgasAPI.json",
"gas_station_decimals": 8,
"gas_station_policy": {
"policy": "MeanAverageFast"
}
}
Response (Success)
{
"coin": "ETH",
"address": "0x3c7aad7b693e94f13b61d4be4abaeaf802b2e3b5",
"balance": "50",
"required_confirmations": 1,
"requires_notarization": false,
"unspendable_balance": "0",
"result": "success"
}
Unable to fetch gas price from station
Response (Gas station error)
{
"error": "Failed to get gas price from station"
}
The coin is already activated
Response (Already enabled)
{
"error": "lp_coins:1308] eth:295] Coin ETH is already activated"
}
Enable Method
{
"coin": "NZDS-PLG20",
"method": "enable",
"swap_contract_address": "0x9130b257D37A52E52F21054c4DA3450c72f595CE",
"fallback_swap_contract": "0x9130b257D37A52E52F21054c4DA3450c72f595CE",
"urls": [
"https://node.komodo.earth:8080/polygon",
"https://pol3.cipig.net:18755",
"https://polygon.gateway.tenderly.co"
],
"userpass": "RPC_UserP@SSW0RD"
}
Response (Success)
{
"coin": "NZDS-PLG20",
"address": "0x3c7aad7b693e94f13b61d4be4abaeaf802b2e3b5",
"balance": "350",
"required_confirmations": 1,
"requires_notarization": false,
"unspendable_balance": "0",
"result": "success"
}
Unable to connect to Polygon RPC
Response (Connection failed)
{
"error": "All Polygon RPC servers unavailable"
}
The coin is already activated
Response (Already enabled)
{
"error": "lp_coins:1308] Coin NZDS-PLG20 is already activated"
}
Enable Method
{
"coin": "BUSD-BEP20",
"method": "enable",
"swap_contract_address": "0xeDc5b89Fe1f0382F9E4316069971D90a0951DB31",
"fallback_swap_contract": "0xeDc5b89Fe1f0382F9E4316069971D90a0951DB31",
"urls": [
"https://bsc1.cipig.net:18655",
"https://bsc2.cipig.net:18655",
"https://bsc3.cipig.net:18655"
],
"userpass": "RPC_UserP@SSW0RD"
}
Response (Success)
{
"coin": "BUSD-BEP20",
"address": "0x3c7aad7b693e94f13b61d4be4abaeaf802b2e3b5",
"balance": "45",
"required_confirmations": 1,
"requires_notarization": false,
"unspendable_balance": "0",
"result": "success"
}
Unable to connect to BSC RPC
Response (Connection failed)
{
"error": "All BSC RPC servers unavailable"
}
The coin is already activated
Response (Already enabled)
{
"error": "lp_coins:1308] Coin BUSD-BEP20 is already activated"
}
For enabling Z coins, refer to the ZHTLC activation tasks in the v2.0 Dev API.
To see more examples for other platforms like Fantom, Avalanche & Harmony, you can search the Komodo DeFi Framework API Coin Activation Commands List
or build a single batch
command to enable a set of selected coins via the
Batch Coin Activation Form
We welcome volunteers to test new coins for Komodo DeFi Framework API compatibility! Follow the Submitting Coin Test Results guide for more information, or drop into the Komodo Platform Discord Server for a chat if you need some help.