I develop and manage an online game where users collect and trade virtual pets (it is entirely online). It's a simple game, we periodically release new pets, users collect them and get random ones, then they trade for the ones they want, and some are rare. We also do holiday events.
The problem is, there's nothing preventing people from creating new accounts, collecting a bunch of free pets, and then trading them all to their main account, or at least the rare ones. They could also trade them all to other users in exchange for things on other sites. This is against our rules, but enforcing it is subjective and difficult.
Historically, we've fought this by manually catching these users and banning them, looking at ip addresses, messages, trading patterns, etc. The common defense is usually "that's just my friend/sibling and they don't play as seriously as I do". And that may be true, I have no way to prove it, I just have to determine myself if they've gone too far or are abusing the system. This type of cheating can be bad for our economy as it hurts rarity values, and gives cheaters an unfair advantage in the market.
I believe this is a fundamentally flawed system and am trying to figure out how to fix it so cheating is not possible, or at least very difficult. I've seen other similar games force users to play mini-games to earn currency to get things, whereas we just give away free stuff periodically. I don't like this approach because 1.programming mini-games is a lot of extra work and 2.we're known for being a casual game, I don't think users would like playing tedious mini-games over and over to collect pets.
The solution I've been considering would be implementing a currency, say gold, that you get periodically for logging in and "being active" on the site. Gold would be required to collect the free pets, and to trade them. So even if you create a new account, you can't just trade away everything you just collected. In order to do big trades where you give away large amounts of stuff, you would have to accumulate lots of gold. Pokemon Go used this approach with stardust, but then again, there's a lot more to do in that game to earn it, and perhaps that's my problem. This has always been a simple, free to play game, and that's why people like it. Also, it's just me working on this, and my skill set is mostly web development.
Can anyone offer advice? I would really appreciate any feedback.
EDIT: Thanks for all the great suggestions, the answers and discussion this generated helped me a lot.