• Forum has been upgraded, all links, images, etc are as they were. Please see Official Announcements for more information

Darksend Liquidity Provider - v0.10.16.4

eduffield

Core Developer
Some improvements were suggested by the community, such as allowing the liquidity provider to mix with any denomination and sending random payments to itself from time to time, so it looks like a normal client.

Settings

./darkcoin-qt --listen=0 --liquidityprovider=10 --datadir=/home/user/.darkcoin
./darkcoind --listen=0 --liquidityprovider=10 --datadir=/home/user/.darkcoin

I’ve introduced --liquidityprovider=[1-100], 1 being very frequent mixing and 100 being very infrequent.

Fees - Maximum amount (without possible collateral charges, due to network outages, etc)

Liquidity Provider=1 : Up to 175.2DRK per year
Liquidity Provider=10 : Up to 17.52DRK per year
Liquidity Provider=30 : Up to 5.84DRK per year
Liquidity Provider=50 : Up to 3.504DRK per year
Liquidity Provider=100 : Up to 1.752DRK per year

Likely fees will be much lower due to the lack of Darksend mixed transactions currently. However, I suggest running with at least a setting of 20 (being that it can mix with anyone).

How much DRK is needed?

The liquidity provider can run with any amount of DRK. But I suggest running it with between 50DRK and 1000DRK.

Updates
- Improvements for not sending payments to yourself so frequently
- Randomly change anon amount infrequently

Note
- There is some issue where collateral is being charged when it shouldn't. These are 0.1DRK charges that will appear randomly. I've been getting about 1 every 2 days or so. I'll look into this later.

- Updated to be compatible with 15.19

Downloads

Linux
https://github.com/darkcoinproject/...dityproviders/darkcoin-0.10.16.4-linux.tar.gz

OSX
https://github.com/darkcoinproject/...liquidityproviders/darkcoin-0.10.16.4-osx.dmg

Windows
https://github.com/darkcoinproject/...liquidityproviders/darkcoin-0.10.16.4-win.zip
 
Last edited by a moderator:
Great work !
I am not sure if you ever sleep as you are bringing us updates on a constant level !!

very cool !
thanks ..>
 
Wow, this is out of the blue! I didn't know something like this was in the works! Gonna put my non-mn coins on this!
 
Great I want to run a few of these on reserved instances. It is important for people trying Darksend for the first time to have a good experience from the get go.
 
eduffield
  • Any issues with running it with more than 1000?
If so: Do you receive more fee's with a larger amount available?​
  • Is the source available to compile instead of the binary files?
  • How is this compared to a MN?
N/M, after reading it again, it appears that you get charged fees for operating the daemon as a liquidity provider.
 
eduffield
  • Any issues with running it with more than 1000?
If so: Do you receive more fee's with a larger amount available?​
  • Is the source available to compile instead of the binary files?
  • How is this compared to a MN?
N/M, after reading it again, it appears that you get charged fees for operating the daemon as a liquidity provider.
Sure you get charged fees, darksend denominations like any other round. Collateral charges are hit or miss, but I have received those on a non-liquidity client as well.
 
Can this be run on a masternode along side the normal client (just with it's own data dir)? Or does it need it's own ip, etc?
 
Looks like you can run it beside a masternode. Doesn't need to listen on port 9999.

my aggressive (mix every 30 blocks) darkcoin.conf
Code:
#----
rpcuser=stuff
rpcpassword=stuff
rpcallowip=127.0.0.1
rpcport=9998
#----
listen=0
server=1
daemon=1
logtimestamps=1
maxconnections=256
#--------------------
masternode=0
#--------------------
anonymizedarkcoinamount=10000
liquidityprovider=2
#--------------------
 
eduffield
  • Any issues with running it with more than 1000?
If so: Do you receive more fee's with a larger amount available?​
  • Is the source available to compile instead of the binary files?
  • How is this compared to a MN?
N/M, after reading it again, it appears that you get charged fees for operating the daemon as a liquidity provider.

Yes one gets charged fees but newcomers will have a good experience and stay with DRK, so what we pay in fees hopefully we get back 10x in adoption.
 
So I get why there needs to be a fee for Darksend, to prevent spamming/abuse.
But here's my proposal: Let Masternodes be Darksend Liquidity Providers (optional) until there's enough usage that we don't need it anymore AND don't charge them the fee.
If a MN operator trys to missbehave, eg spam the network, his MN could be kicked off the MN list for say 24 hours or maybe more so that this MN gets no Payments during this time.
This way we could get Liquidity without fees for the Providers while spaming is still punished.

Is something like this possible evan?
 
Looks like you can run it beside a masternode. Doesn't need to listen on port 9999.

my aggressive (mix every 30 blocks) darkcoin.conf
Code:
#----
rpcuser=stuff
rpcpassword=stuff
rpcallowip=127.0.0.1
rpcport=9998
#----
listen=0
server=1
daemon=1
logtimestamps=1
maxconnections=256
#--------------------
masternode=0
#--------------------
anonymizedarkcoinamount=10000
liquidityprovider=2
#--------------------


Can you give an example setup with the LP and MN living happily together?
 
So I get why there needs to be a fee for Darksend, to prevent spamming/abuse.
But here's my proposal: Let Masternodes be Darksend Liquidity Providers (optional) until there's enough usage that we don't need it anymore AND don't charge them the fee.
If a MN operator trys to missbehave, eg spam the network, his MN could be kicked off the MN list for say 24 hours or maybe more so that this MN gets no Payments during this time.
This way we could get Liquidity without fees for the Providers while spaming is still punished.

Is something like this possible evan?

The design of how a Masternode is defined does not allow using the 1000 DRK for mixing.
 
The design of how a Masternode is defined does not allow using the 1000 DRK for mixing.
Maybe in the future, the definition of Masternodes could be changed to something like:
  • hold 950 DRK' in a single address (vin = 950, and MN disabled if these are moved), possibly in cold storage as it's allowed now
  • and keep 50 DRK in some place that allows mixing with other users
Of course the second step should be defined more clearly (hot wallet or not? if yes, how to keep it secure?), but I think participating in mixing operations should be a mandatory task assigned to masternodes.
So far we've concluded that Darksend was successfully preserving anonimity by making it extremely expensive to compromise enough masternodes, but judging by the current liquidity for mixing, I think that conversely, it would be extremely cheap to setup a lot of rogue liquidity providers that could allow tracing the coins back to their original owners.
We need thousands of liquidity providers for the system to be safe, and it happens that we are aiming for thousands of masternodes in operation.
 
The design of how a Masternode is defined does not allow using the 1000 DRK for mixing.

They can't mix with the 1000DRK vin. But why not with some extra DRK you put on them?
This should be optional I think. But my guess is that if you lift the fees for DLP there would be a lot more people willing to do it.
The trick with requiring a MN is that you can punish them for misbehaving (don't give them MN payments for a specific time if they spam the network) other then charging fees!

One flaw of this design could be that because of the missing fees one could maybe identify them in the transaction and weaken the anonymity of the Darksend.
Maybe someone with more technical insight in Darksend than me can answer if that's true or not?
 
Can you give an example setup with the LP and MN living happily together?

I don't have them running side-by-side, but using two datadirs and rpcports should work.

Code:
cd ~; mkdir .darkcoin.masternode .darkcoin.liqprov

Code:
#~/.darkcoin.liqprov/darkcoin.conf
#----
rpcuser=nicelonghexstring
rpcpassword=adifferentnicelonghexstring
rpcallowip=127.0.0.1
rpcport=9996
#----
listen=0
server=1
daemon=1
logtimestamps=1
maxconnections=256
#--------------------
masternode=0
#--------------------
anonymizedarkcoinamount=10000
liquidityprovider=2
#--------------------

Code:
#~/.darkcoin.masternode/darkcoin.conf
#----
rpcuser=anothernicelonghexstring
rpcpassword=anotheradifferentnicelonghexstring
rpcallowip=127.0.0.1
rpcport=9998
#----
listen=1
server=1
daemon=1
logtimestamps=1
maxconnections=256
#--------------------
masternode=1
masternodeaddr=your.masternode.ip.address:9999
masternodeprivkey=yourmasternodeprivkey
#--------------------

then launch the two as:
Code:
darkcoind -datadir=~/.darkcoin.masternode
darkcoind -datadir=~/.darkcoin.liqprov
 
Maybe in the future, the definition of Masternodes could be changed to something like:
  • hold 950 DRK' in a single address (vin = 950, and MN disabled if these are moved), possibly in cold storage as it's allowed now
  • and keep 50 DRK in some place that allows mixing with other users
Of course the second step should be defined more clearly (hot wallet or not? if yes, how to keep it secure?), but I think participating in mixing operations should be a mandatory task assigned to masternodes.
So far we've concluded that Darksend was successfully preserving anonimity by making it extremely expensive to compromise enough masternodes, but judging by the current liquidity for mixing, I think that conversely, it would be extremely cheap to setup a lot of rogue liquidity providers that could allow tracing the coins back to their original owners.
We need thousands of liquidity providers for the system to be safe, and it happens that we are aiming for thousands of masternodes in operation.
Liquidity Provider is just a temporary solution for now. When more users participate in mixing their coins, we won't need LP. Participating in mixing operations should NOT be a mandatory task assigned to masternodes, as MNs already serve an important job by being "mixing pools" for Darksend, yet MNs do not get to know who's mixing and where they're going.. I would not want MNs to be where to mix my coins and who to pair with me. And I would not want the 1000DRK vin to be touched or reduced. We should just leave MNs alone to be what they are right now, and try not to complicate MN setup even more for newbies.

Also, we don't need thousands of Liquid Providers out of masternoders.. because if they keep running DS 14/7 like that it would just bloat up the blockchain. When more users need/want to mix their coins, they'll find each other to mix with, and a few LProviders help plenty, as I've done it if you look at the previous version page. Mixing your coins should actually be quietly anonymous though, right now we're in the early stage so we announce loudly but it should actually be privately as much as possible.
 
Last edited by a moderator:
Liquidity Provider is just a temporary solution for now. When more users participate in mixing their coins, we won't need LP. Participating in mixing operations should NOT be a mandatory task assigned to masternodes, as MNs already serve an important job by being "mixing pools" for Darksend, yet MNs do not get to know who's mixing and where they're going.. I would not want MNs to be where and who to mix my coins for me. And I would not want the 1000DRK vin to be touched or reduced. We should just leave MNs alone to be what they are right now, and try not to complicate MN setup even more for newbies.

Agreed. In a perfect world, I would just want masternodes to sign the mixing transactions and only mix my coins with other users that also really want their coins mixed.
However, do you really think that at each block, i.e. every 2.5 minutes, hundreds of people will want to mix their coins? Or even tens?

My belief is that there will only be a handful of people who will genuinely want their coins mixed at any instant.
So far, we've only considered the possibility that Darksend could be broken by rogue masternodes, owned by bad players. It has been demonstrated that this threat was totally neglectible as it would require hundreds of thousands of darkcoins for the attack to have even a fair probability of success.

But conversely, anyone that can afford ONE masternode (current value: less than 2000 USD) could easily setup 20 wallets with 50 DRK that they leave always mixing with other coins.
Now, suppose that guy A tries to genuinely mix his coins. If they are only mixed with the 20 rogue wallets' coins, the bad player will directly be able to identify where his own coins went, and conversely trace guy A's original coins to the new addresses.

Even if there are more people that honestly want to mix their coins, it will still be cheap, and cheaper by an order of magnitude, to setup a lot of rogue mixing wallets.
Unless hundreds of people mix their coins at each instant, I don't see this problem going away easily.
 
I do not pretend to be a coder, but Dr.Crypto's earlier comment got me thinking. He says:
  • hold 950 DRK' in a single address (vin = 950, and MN disabled if these are moved), possibly in cold storage as it's allowed now
  • and keep 50 DRK in some place that allows mixing with other users
The first point has been dismissed, however I suspect that the second has some merit. During this time of growing adoption, while the need for liquidity providers exists, could there not be a wallet type dedicated to providing liquidity? This hypothetical wallet would only be used for mixing and not for other transactions. It would incur no fees, and if the need for liquidity is great enough, could even be incentivised with a percentage of the MN fee. Once initiated the removal of any funds would result in the destruction of its liquidity aiding status, and it would return to being a regular wallet incurring normal charges.

Given the development of the spork code, I suspect that this could be coded in such a way that this wallet type could be enabled and disabled at will, as Evan sees fit. For my part, it is unlikely I will ever be able to fund more than a few MN shares, but I could certainly dedicate 50 or 100 coins to providing liquidity. Especially if it meant I could earn some duffs in the process. ;-)

Edit: Hmm... I just read Dr. C's last post, and I see the problem. Could the mixing only wallets have an encrypted address, so the holders do not know the addresses that were being used. The block chain would show the real address, but no-one would know for sure if it was their wallet providing the liquidity. Like I said, I'm not a coder, so I realize this may be unworkable.
 
Last edited by a moderator:
Agreed. In a perfect world, I would just want masternodes to sign the mixing transactions and only mix my coins with other users that also really want their coins mixed.
However, do you really think that at each block, i.e. every 2.5 minutes, hundreds of people will want to mix their coins? Or even tens?

My belief is that there will only be a handful of people who will genuinely want their coins mixed at any instant.
So far, we've only considered the possibility that Darksend could be broken by rogue masternodes, owned by bad players. It has been demonstrated that this threat was totally neglectible as it would require hundreds of thousands of darkcoins for the attack to have even a fair probability of success.

But conversely, anyone that can afford ONE masternode (current value: less than 2000 USD) could easily setup 20 wallets with 50 DRK that they leave always mixing with other coins.
Now, suppose that guy A tries to genuinely mix his coins. If they are only mixed with the 20 rogue wallets' coins, the bad player will directly be able to identify where his own coins went, and conversely trace guy A's original coins to the new addresses.

Even if there are more people that honestly want to mix their coins, it will still be cheap, and cheaper by an order of magnitude, to setup a lot of rogue mixing wallets.
Unless hundreds of people mix their coins at each instant, I don't see this problem going away easily.
More likely Guy A would rather put his 20wallets*50DRK into another MN... :tongue: (at the rate of greediness for more drk as being displayed.. :tongue: )
PLUS.. it takes only 3 participants to pair so more likely GuyA will pair his coins to each other, he's pairing with himself! :grin:
He might pair with someone else too.. We still need to test on how crackable DS is..
 
The first point has been dismissed, however I suspect that the second has some merit.
The first point actually implied reducing the "1000 static DRK" limit to 950, but with the addition of a mandatory 50 mixing buffer wallet, as you say :)
I just mentioned the first point with 950 because I think that 1000 DRK is a nice number that is easier to visualise as a minimum investment to own a masternode, but it would work all the same with 1050DRK.

My point was that I wanted to oppose this:
They can't mix with the 1000DRK vin. But why not with some extra DRK you put on them?
This should be optional I think. But my guess is that if you lift the fees for DLP there would be a lot more people willing to do it.
I don't think mixing by masternodes should be optional for the reasons stated previously, and I think the fees for providing liquidity is a non-problem as they could simply be compensated by a slight increase in MN payments (or not - I'm not sure MN owners would really care about something around 0.01% more).
 
Back
Top