NOTE:The market
command was removed from counterparty-client
after this article was published, so the approach described in this post cannot be used verbatim (because market
was removed, one would have to obtain DEx market information elsewhere (there are several community sites that offer it; you can also use the API), and do the rest with counterparty-client
).
Certain wallets and applications that utilize the Counterparty API continue to retain the full ability to trade BTC on the Counterparty Distributed Exchange, whereas counterparty-client
is now missing the ability to obtain the market information.
Introduction
Because BTC Pay was removed from Counterwallet, this article explains how to use counterparty-client
to trade BTC on the Counterparty DEx.
This article is aimed at power users who feel comfortable with the counterparty CLI and intermediate-to-advanced bitcoin operations.
If you’re new to Counterparty and/or Bitcoin, at least try this on testnet until you’re sufficiently familiar and comfortable with all the steps. Regular users who want to purchase assets for bitcoin (BTC) can use one of traditional (centralized) exchanges or Shapeshift.io to buy XCP or other Counterparty assets.
All counterparty client commands used in this article can be found here. In the CLI you can get simple help by running “counterparty-cli --help” and “counterparty-cli --help” to get help for the particular command (replace <command>
with one of commands, or actions, from the output of counterparty-client --help
; for example, counterparty-client send --help
would show help for the send action).
NOTE
-
While BTC Pay is still available in Counterwallet (new BTC Sell orders were stopped as of Nov 5, 2014), if you use the same address in CLI close your Counterwallet wallet when making BTC Pay from CLI just so that you do not accidentally make BTC payment from both counterparty-client and Counterwallet.
-
It is strongly recommended to try these commands on the testnet before you use “real” coins. Manual trading using the CLI is prone to human errors. Please be very careful when computing totals and interpreting command outputs.
How to find offers and place an order on the DEx
This part assumes you already have a funded address in Bitcoin-Core with addrindex patch.
- Display market offers of
SOME
asset denominated in anything (although you’d be looking for BTC-denominatedSOME
, you may find attractive offers in XCP, so it’s okay to display multiple denominators).
counterparty-client market --give-asset=SOME
Output may look similar to this:
Open Orders
+----------------+------------+--------------+---------------+------------------+------------------+-----------+------------------------------------------------------------------+
| Give Quantity | Give Asset | Price | Price Assets | Required BTC Fee | Provided BTC Fee | Time Left | Tx Hash |
+----------------+------------+--------------+---------------+------------------+------------------+-----------+------------------------------------------------------------------+
| 20.0 | SOME | 0.001 | BTC/SOME ask | 0.0012 | 0.0001 | 94 | 9LONGSTRING0 |
Let’s see: someone’s offering 20 SOME
in exchange for BTC at the price of 0.001 BTC per SOME
(we’ll ignore DEx fees in this how to). This particular order expires in 94 blocks.
- That offer is good for us but we want to order 10
SOME
(not all 20):
counterparty-client order --source=mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns --get-quantity=10 --get-asset=SOME --give-quantity=0.01 --give-asset=BTC --expiration=100 --fee-fraction-provided=0.009
In Counterwallet the default expiration for BTC Sell was (before it was disabled) 2000 blocks and fee provided is 1% of the order value. Here we show an example with different values (100 blocks, 0.9%).
We’re buying 10 units of SOME
for 0.01 BTC (therefore 10 SOME * 0.001 BTC/SOME = 0.01 BTC order size) using funds from our Bitcoin/Counterparty address mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns
.
How to manually complete BTC Pay using counterparty-client
If you want to trade with your Counterwallet address, you need to import its private key to Bitcoin-Core with addrindex. In Counterwallet get your private key for the address you want to use and then In Bitcoin Core go to Help > Debug Window
. In debug console import your private key:
importprivkey <YOUR-PRIVATE-KEY> CW2 rescan
CW2 is just a label that we chose for this address (to remind us this is our second Counterwallet address, for example). If you have a space in the label, surround it with double quotes (e.g. “Counterwallet Address #2”). There’s rescan option to importprivkey
is time consuming. After that command completes, you will not see non-BTC assets in Bitcoin-Qt, but you can use counterparty-client wallet
to check.
If you do not want to use your Counterwallet address, then you can send some BTC to your Bitcoin Core address and avoid the need to import private key.
This counterparty-client command would be executed in Windows console (not in Bitcoin-Core debug console).
counterparty-client wallet
If everything is okay, you will see your imported address and BTC and Counterparty assets it contains.
If your order has been matched, check ID for the order match:
counterparty-client pending --address <YOUR-ADDRESS>
Obvoiusly we’d provide mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns
as our address because that’s what we used to place our order. In return we’d get Order Match ID
which is required for BTC Pay. Let’s assume that Order Match ID was 092f15d36786136c4d868c33356ec3c9b5a0c77de54ed0e96a8dbdd8af160c23
.
In output of the pending action we can see Matched Order ID
and also Time Left
. Below that we see that we have 18 blocks (figure in the last column) to make BTC Pay. If we want you can wait a few more blocks for additional confirmations on the blockchain, although for small orders that may be considered unnecessary.
---------------------------------------------------+-----------+
| Matched Order ID | Time Left |
---------------------------------------------------+-----------+
| 092f15d36786136c4d868c33356ec3c9b5a0c77de54ed0e96a8dbdd8af160c23|18|
| ---------------------------------------------------+-----------+
Now execute BTC Pay (again, you can do this within 20 blocks from the moment of matching - see Time Left
above). That’s why you need to have your setup ready before your BTC Sell order is matched.
counterparty-client btcpay --source=mtQheFaSfWELRB2MyMBaiWjdDm6ux9Ezns --order-match-id=092f15d36786136c4d868c33356ec3c9b5a0c77de54ed0e96a8dbdd8af160c23
Again, we use our source address and Order Match ID
we obtained in the previous step. We need to have enough BTC at the paying address.
After 3 confirmations BTC Pay should be complete and 20 SOME
should be visible in the output of counterparty-client wallet
for your source address.
"Dual" access to the same address
Notice that if you imported your private key from a Counterwallet address, this address is still accessible from there as well.
If is better to not use this approach, although it does allow convenient BTC (from Counterwallet) and non-BTC (in counterparty-client) operations on the DEx.