Let’s consider an example: you want to exchange a certain amount of KEL tokens for CELL tokens at a favorable rate on the Backbone network.
First, let’s see what the market can offer us. To do this, we need to get a list of orders using the command Node Command - SRV_XCHANGE ORDERS.
Request:
curl --unix-socket /opt/cellframe-node/var/run/node_cli -X POST http://localhost/connect -d '{"method":"srv_xchange", "params":["srv_xchange;orders;-net;Backbone;-status;opened;-token_from;CELL;-token_to;KEL"], "id":"1"}'
Response:
{ "type": 0, "result": "limit: 1000\n
orderHash: 0x2B3B39E4ABF6B3B77702C5D6DB9EBF4593F9D1952B7BBC3C78F817B4FA992E17\n ts_created: Fri, 27 Oct 2023 17:34:26 +0700\n Status: OPENED, amount: 0.000001 (1000000000000) CELL, filled: 0%, rate (KEL\/CELL): 0.000001, net: Backbone\n\n
orderHash: 0x1D80DF6E1FA6E95BAF3077F6773EB268EF1661DDB4E631BEF2FA7378D35BA6BA\n ts_created: Wed, 03 Jan 2024 03:03:27 +0700\n Status: OPENED, amount: 0.1 (100000000000000000) CELL, filled: 0%, rate (KEL\/CELL): 50.0, net: Backbone\n\n
orderHash: 0x16CAD34E3BB584D62F2B0A67B44979CC774442103EEA3798130C52CE173B4809\n ts_created: Wed, 03 Jan 2024 03:10:45 +0700\n Status: OPENED, amount: 0.1 (100000000000000000) CELL, filled: 0%, rate (KEL\/CELL): 55.0, net: Backbone\n\n
orderHash: 0xAD9997EF18E7DE40109C696FD197AE30C96A2FB38CCEF838342D65BC68AB4E39\n ts_created: Thu, 25 Jan 2024 18:37:42 +0700\n Status: OPENED, amount: 0.0002 (200000000000000) CELL, filled: 0%, rate (KEL\/CELL): 45.45454545454545, net: Backbone\n\n
orderHash: 0xD3A8ACEF120BAD24CB178AE7BBE4D31A9E23DB9A7F65EDDD899082AED5D8458A\n ts_created: Mon, 01 Apr 2024 14:42:22 +0700\n Status: OPENED, amount: 1.0 (1000000000000000000) CELL, filled: 0%, rate (KEL\/CELL): 90.909090909090892561, net: Backbone\n\n
orderHash: 0x8A1C751CCF8B80325EB4B70EA336BF0EF1568119274DC33473640A78A6A40AED\n ts_created: Sun, 02 Jun 2024 08:16:22 +0700\n Status: OPENED, amount: 800.0 (800000000000000000000) CELL, filled: 0%, rate (KEL\/CELL): 200.0, net: Backbone\n\n
orderHash: 0xDDFC1FA6B77A8C6F40F78FC18636A246FA8DB9E38095A7B2F2EE98DF905B92E6\n ts_created: Fri, 30 Aug 2024 17:25:50 +0700\n Status: OPENED, amount: 1.0(1000000000000000000) CELL, filled: 99%, rate (KEL\/CELL): 100.0, net: Backbone\n\n
orderHash: 0x83B1F0AF986CDF64D0E6CC7681BC6700BA53C8C1922F29796F3CA1B49F5A325B\n ts_created: Mon, 09 Sep 2024 03:24:42 +0700\n Status: OPENED, amount: 1000.0 (1000000000000000000000) CELL, filled: 0%, rate (KEL\/CELL): 1000.0, net: Backbone\n\n
orderHash: 0x4DCAED5515DD1EC7CE6BDD5118EC3E35931D1215C948E55B98966CFC00143E99\n ts_created: Wed, 11 Sep 2024 17:53:29 +0700\n Status: OPENED, amount: 0.000000000000000002 (2) CELL, filled: 99%, rate (KEL\/CELL): 1.140000000000000001, net: Backbone\n\n", "id": 1 }
Let’s consider order parameters:
status - order status
amount - amount of tokens offered for exchange
filled - this parameters shows order completion in percentage
rate - (token_to/token_from) relation of one token to another
net - network where order is active
We look at profitable orders by rate (the ratio of CELL to KEL). To find out the average market rate of this pair of tokens, you need to use the command Node Command - SRV_XCHANGE TOKEN_PAIR RATE.
Request:
curl --unix-socket /opt/cellframe-node/var/run/node_cli -X POST http://localhost/connect -d '{"method":"srv_xchange", "params":["srv_xchange;token_pair;rate;average;-net;Backbone;-token_from;CELL;-token_to;KEL"], "id":"1"}'
Response:
{ "type": 0, "result": "Average rate: 154.250463736363634256\nLast rate: 1.140000000000000001 Last rate time: Wed, 11 Sep 2024 17:53:29 +0700", "id": 1}
From the answer we see that the average rate is 154. Although the real CELL/KEL ratio fluctuates around 100.
Of all the orders presented, the following looks the most profitable:
orderHash: 0xD3A8ACEF120BAD24CB178AE7BBE4D31A9E23DB9A7F65EDDD899082AED5D8458A\n ts_created: Mon, 01 Apr 2024 14:42:22 +0700\n Status: OPENED, amount: 1.0 (1000000000000000000) CELL, filled: 0%, rate (KEL\/CELL): 90.909090909090892561, net: Backbone
Rate is about 91. Try to purchase it and get 1 CELL.
Purchase the order
Before purchase let’s see the balance of our wallet “DANWALLET” using Node Command - WALLET INFO:
Request:
curl --unix-socket /opt/cellframe-node/var/run/node_cli -X POST http://localhost/connect -d '{"method":"wallet", "params":["wallet;info;-net;Backbone;-w;DANWALLET"], "id":"1"}'
Response:
{ "type": 0, "result":
sign: correct
wallet: DANWALLET
addr: Rj7J7MiX2bWy8sNyYF5njS2TWg97i4EtaViUAdri6qhjUN158aiGNAugRaqLjkSXA7Jq8xyrNiuzPgtyfQKeNxSDzWrCTngXJddfqKzK
network: Backbone
signs: sig_dil
tokens:
balance:
coins: 6.55
datoshi: 6550000000000000000
token:
ticker: CELL
description:
balance:
coins: 202.28
datoshi: 202280000000000000000
token:
ticker: KEL
description:
, "id": 1}
We see that we have enough KEL to execute the order. Let’s try to buy it. To do this, we need to indicate that we want to sell about 90 KEL.
Request:
curl --unix-socket /opt/cellframe-node/var/run/node_cli -X POST http://localhost/connect -d '{"method":"srv_xchange", "params":["srv_xchange;purchase;-net;Backbone;-order;0xD3A8ACEF120BAD24CB178AE7BBE4D31A9E23DB9A7F65EDDD899082AED5D8458A;-w;DANWALLET;-value;90.0e+18;-fee;0.01e+18"], "id":"1"}'
Response:
{ "type": 0, "result": "Exchange transaction has done. tx hash: 0x3749F78CAE6CAE532AA61D5436E66B01C35D6888D2877B61DDEDAAC7848D7095", "id": 1 }
The transaction has been completed, now let’s look at our wallet balance and order status.
{ "type": 0, "result":
стало sign: correct
wallet: DANWALLET
addr: Rj7J7MiX2bWy8sNyYF5njS2TWg97i4EtaViUAdri6qhjUN158aiGNAugRaqLjkSXA7Jq8xyrNiuzPgtyfQKeNxSDzWrCTngXJddfqKzK
network: Backbone
signs: sig_dil
tokens:
balance:
coins: 7.53
datoshi: 7530000000000000000
token:
ticker: CELL
description:
balance:
coins: 111.370909090909107439
datoshi: 111370909090909107439
token:
ticker: KEL
description:
, "id": 1}
1 CELL added, and 90 KEL left. Also 0.01 CELL was spent on commission.
Let’s look at the order status:
Request:
curl --unix-socket /opt/cellframe-node/var/run/node_cli -X POST http://localhost/connect -d '{"method":"srv_xchange", "params":["srv_xchange;order;status;-net;Backbone;-order;0xD3A8ACEF120BAD24CB178AE7BBE4D31A9E23DB9A7F65EDDD899082AED5D8458A"], "id":"1"}'
{ "type": 0, "result": "orderHash: 0xD3A8ACEF120BAD24CB178AE7BBE4D31A9E23DB9A7F65EDDD899082AED5D8458A\n ts_created: Mon, 01 Apr 2024 14:42:22 +0700\n Status: CLOSED, amount: 0.0 (0) CELL, filled: 100%, rate (KEL\/CELL): 90.909090909090892561, net: Backbone\n\n", "id": 1 }
The order is closed because we have filled it 100 percent.
There are no more interesting orders, but we, for example, would like to get another CELL at a normal rate somewhere around KEL/CELL = 0.01 (which is the same as CELL/KEL =100).
So let’s create our own order.
Creation of our own order
Order parameters will be like this:
token_sell: KEL
token_buy: CELL
rate: 0.01
value: 100.0e+18 KEL (100 KEL)
fee: 0.01e+18 CELL (0.01 CELL)
Request:
curl --unix-socket /opt/cellframe-node/var/run/node_cli -X POST http://localhost/connect -d '{"method":"srv_xchange", "params":["srv_xchange;order;create;-net;Backbone;-token_sell;KEL;-token_buy;CELL;-w;DANWALLET;-value;100.0e+18;-rate;0.01;-fee;0.01e+18"], "id":"1"}'
Response:
{ "type": 0, "result": "\nSuccessfully created order 0x86A53D20ADAE71BC1DBADB3F24A3449A6E664090F3FB4371EE49211B5DDE18B0", "id": 1 }
The order has been successfully created. Let’s check the status of the created order:
`Request:
curl --unix-socket /opt/cellframe-node/var/run/node_cli -X POST http://localhost/connect -d '{"method":"srv_xchange", "params":["srv_xchange;order;status;-net;Backbone;-order;0x86A53D20ADAE71BC1DBADB3F24A3449A6E664090F3FB4371EE49211B5DDE18B0"], "id":"1"}
Response:
{ "type": 0, "result": "orderHash: 0x86A53D20ADAE71BC1DBADB3F24A3449A6E664090F3FB4371EE49211B5DDE18B0\n ts_created: Thu, 12 Dec 2024 17:57:51 +0700\n Status: OPENED, amount: 100.0 (100000000000000000000) KEL, filled: 0%, rate (CELL\/KEL): 0.01, net: Backbone\n\n", "id": 1 }
Now all that remains is to wait until someone finds this order profitable and buys it out partially or completely.
You need to periodically update the order status with commands
curl --unix-socket /opt/cellframe-node/var/run/node_cli -X POST http://localhost/connect -d '{"method":"srv_xchange", "params":["srv_xchange;order;status;-net;Backbone;-order;0x86A53D20ADAE71BC1DBADB3F24A3449A6E664090F3FB4371EE49211B5DDE18B0"], "id":"1"}
Eventually, our order is executed.
{ "type": 0, "result": "orderHash: 0x86A53D20ADAE71BC1DBADB3F24A3449A6E664090F3FB4371EE49211B5DDE18B0\n ts_created: Thu, 12 Dec 2024 17:57:51 +0700\n Status: CLOSED, amount: 0.0 (0) KEL, filled: 100%, rate (CELL\/KEL): 0.01, net: Backbone\n\n", "id": 1 }
Let’s now look at the balance of our wallet.
{ "type": 0, "result":
sign: correct
wallet: DANWALLET
addr: Rj7J7MiX2bWy8sNyYF5njS2TWg97i4EtaViUAdri6qhjUN158aiGNAugRaqLjkSXA7Jq8xyrNiuzPgtyfQKeNxSDzWrCTngXJddfqKzK
network: Backbone
signs: sig_dil
tokens:
balance:
coins: 8.52
datoshi: 8520000000000000000
token:
ticker: CELL
description:
balance:
coins: 11.370909090909107439
datoshi: 11370909090909107439
token:
ticker: KEL
description:
, "id": 1}
100 KEL left, 1 CELL added, also 0.01 CELL was spent on paying the commission.
If no one bought our order or bought it only partially, we can close it with the command Node Command - SRV_XCHANGE ORDER REMOVE, as a result of which all our blocked funds will be unblocked and returned to our wallet.
Purchase the order partially
It may happen that we see a profitable order, but we do not want to buy it out completely, or we do not have enough funds, in which case we can execute it partially.
For example, there is the following order:
{
"type": 0,
"result": "orderHash: 0x3AA3A8072E14E09C5CC11D80CE6F1D0C4CDCB8CD5BA76A02CA655F97865AFC4A\n ts_created: Fri, 06 Dec 2024 08:19:33 +0000\n Status: OPENED, amount: 2.0 (2000000000000000000) KEL, filled: 0%, rate (CELL/KEL): 1.0, net: Backbone\n\n",
"id": 1
}
Let’s try to partially buy it back using the command Node Command - SRV_XCHANGE PURCHASE. In particular, we will buy 1 KEL out of the 2 specified in the order.
Request:
curl --unix-socket /opt/cellframe-node/var/run/node_cli -X POST http://localhost/connect -d '{"method":"srv_xchange", "params":["srv_xchange;purchase;-order;0x3AA3A8072E14E09C5CC11D80CE6F1D0C4CDCB8CD5BA76A02CA655F97865AFC4A;-net;Backbone;-w;CELLWALLET;-value;1.0e+18;-fee;0.05e+18"], "id":"1"}'
Response:
{
"type": 0,
"result": "Exchange transaction has done. tx hash: 0x03687FDF843E77280769AA3107005C45E2F631F9CC7AF161A15B4D4EB4371C46",
"id": 1
}
The transaction was successful, now let’s look at the order status.
Request:
curl --unix-socket /opt/cellframe-node/var/run/node_cli -X POST http://localhost/connect -d '{"method":"srv_xchange", "params":["srv_xchange;order;status;-net;Backbone;-order;0x3AA3A8072E14E09C5CC11D80CE6F1D0C4CDCB8CD5BA76A02CA655F97865AFC4A"], "id":"1"}'
Response:
{
"type": 0,
"result": "orderHash: 0x3AA3A8072E14E09C5CC11D80CE6F1D0C4CDCB8CD5BA76A02CA655F97865AFC4A\n ts_created: Fri, 06 Dec 2024 08:19:33 +0000\n Status: OPENED, amount: 1.0 (1000000000000000000) KEL, filled: 50%, rate (CELL/KEL): 1.0, net: Backbone\n\n",
"id": 1
}
We see that the number of available KELs has dropped from 2 to 1, and the order itself is 50 percent filled.