hicetnunc icon indicating copy to clipboard operation
hicetnunc copied to clipboard

Special rules for "0 tez" free giveaways

Open Quasimondo opened this issue 3 years ago • 17 comments

The ability to give away free NFTs is one of the unique features of hic et nunc and I think we all love that ability. Most collectors also use this in a responsible manner and only take one, leaving the rest to others. But as we could observe in the past days there are always a few people who try to abuse this opportunity and take more than one in order to flip those later on the secondary market. This creates frustration and resentment among artists and fans of them so this is a discussion how we can prevent this behavior without curtailing the freedom of the platform. Please share your thoughts or possible solutions here.

I see three possible avenues where we could try to tackle this:

  • on the smart contract level
  • on the UI
  • by social measures

Smart Contract: I am actually not sure if it is possible to put the breaks in here since in order for the contract to prevent selling an NFT to someone who already holds an OBJKT with the same ID it would have to "know" the owners. AFAIK, a smart contract does not have access to that data or at least it would have to do some queries which might either be impossible or computationally expensive. Maybe someone with deeper knowledge on that topic can clarify this

UI: I believe this would be the easiest place to apply the lever. The UI already displays the owners of an OBJKT, so it does know the wallet ids. It also knows the wallet id of the potential collector so it sounds feasible to me to apply the rule: if an OBJKT has a "collect for 0 tez" button AND walletID is already found in owners' IDs THEN hide the "collect for 0 tez" button. This solution is not perfect but I think relatively quick to implement and would discourage probably 95% of the hoarders

Social Measures: This would be the "in hindsight" option. Just like copyminters get banned, anti-social behavior could also become a reportable offense. So if somone notices that someone hoards free giveaways they could report that wallet id and if this cannot be explained by "an honest mistake" measures like a temporary or permanent ban of that wallet could be taken.

Quasimondo avatar Mar 29 '21 08:03 Quasimondo

Seconding the idea that the UI level is the correct place for such a change.

I can think of plenty of situations where the ability to sell multiples to a single user is important, but none of those apply in the "0 tez" case. So I would be in favor of this.

mathMakesArt avatar Mar 29 '21 09:03 mathMakesArt

On a smart contract level it is always possible, if someone were to write a contract for it, to spawn a "sale-contract" that limits sale to 1 per wallet, the only problem is ofc that a hoarder can simply derive new wallets using just a few clicks.

veqtor avatar Mar 29 '21 09:03 veqtor

On a smart contract level it is always possible, if someone were to write a contract for it, to spawn a "sale-contract" that limits sale to 1 per wallet, the only problem is ofc that a hoarder can simply derive new wallets using just a few clicks.

Ah that is interesting - what I am curious to learn is how computationally expensive such an operation would be? As far as I know the contract has only immediate access to the OBJKTs that it is currently holding in escrow to sell. Does it also have immediate access to its "sales history" or does that require some special calls? And how much gas would those extra calls cost?

Quasimondo avatar Mar 29 '21 09:03 Quasimondo

This is definitely something we need to solve. I think it's impossible to completely make hoarding impossible since one could always make more wallets like veqtor said or even fork the hicetnunc UI and use a custom UI. That said, we should definitely try to make it as hard as possible to hoard.

For those who don't know, there is a new official spot for the community to discuss and vote on new features: https://hicetnunc.featureupvote.com/

Limiting the number of possible editions a single user can aquire is already being discussed and voted on here

Github can be intimidating for non-devs and since that is why we are currently trying this new platform :grin:

LeithBA avatar Mar 29 '21 09:03 LeithBA

If someone really wants to give something away for 0ꜩ surely the solution is to just mint a large number of items? Most of the hoarding issues I've seen this weekend related to smaller editions. It happened on my silly unicorns in space thing and only to a small extent but was still quite upsetting as the spirit of the piece was to honour the weekend - I minted 100 and some people missed out. And its on the 2M for 15ꜩ.

Another possibility is for the minter to ramp up the royalty rate to deter the flipper.

I like @Quasimondo's suggestion of a combination of measures. It's so difficult to manage - fully appreciate that.

codewithfeeling avatar Mar 29 '21 09:03 codewithfeeling

That's a good idea. Having a 100% royalty on specific items would actually make hoarding completely useless. Maybe adding a custom royalty field would be the next step to solve this issue?

LeithBA avatar Mar 29 '21 09:03 LeithBA

On the UI side, one could simply slow down the time needed to collect the piece. Maybe some wait function implemented in js where the wait time increases exponentially with the number of items of the same piece owned by the collector?

jagracar avatar Mar 29 '21 09:03 jagracar

If the rule is only enforced in the UI, there is always a risk that someone circumvents it by making a manual request from the browser console/PostMan/curl. Important UI validation always need the exact same validation in back-end.

DonKarlssonSan avatar Mar 29 '21 09:03 DonKarlssonSan

If the rule is only enforced in the UI, there is always a risk that someone circumvents it by making a manual request from the browser console/PostMan/curl. Important UI validation always need the exact same validation in back-end.

That is clear, but it would be a solution that is simple to build, would likely prevent 95% of abuse and make it easy to identify those who actively try to circumvent it and allows that way to apply social measures like banning a wallet who still does it despite the clear signal that this is undesired behavior.

Quasimondo avatar Mar 29 '21 10:03 Quasimondo

I wonder if the best route is to allow the minter to dictate the royalty (possibly only when it is sold at 0ꜩ). This would then put all the responsibility / power to the artist - So if they're not bothered about sell on then fair enough, but if they were, and the royalty was high then it may deter hoarders to start with. The only issue I can see with this is possible vindictive holding just to be a pain in the arse.

Also perhaps in people's collections when they have more than one copy it is marked, so in my case a collector decided to grab 100... it'll show - So there is some social pressure there. I imagine eventually you can move the copies you've bought off hicetnunc, but the high royalty might make that not worth people's while?

mimeArtist avatar Mar 29 '21 10:03 mimeArtist

This is a difficult problem.

The root of the problem is that there are more takers than there is supply, so fundamentally you need a way to decide who, among the takers is going to get it who isn't. One way is to set a price, and say only those willing to pay this price can get it. If a price of 0 is desired, another mechanism must be used.

There are common mechanisms for this in real life:

  • discretionary: whoever owns the supply gives it away at their discretion, using any criterion of their choosing
  • first come first serve
  • lotteries (allocation at random among interested parties)
  • asking people to do something costly but that doesn't directly represent an expenditure of money (wait in line, write an essay, do volunteer work for a charitable organisation, etc)

The problem with a lottery or first come first serve is that they rely on a resistant notion of identity not to be abused). First come first serve is generally limited to one per person, lotteries are limited to one entry per person, etc.

So if we want to do this on a blockchain, the chain needs to give us some notion of identity. Keys won't do because they are cheap to create and someone could easily make a very large amount of them.

There are on chain identity proposals like https://www.spruceid.com/credible which can help here.

But even then, the concept of identity itself is naturally limited. A Twitter account can be verified, but that's not a person, that could be a fake account. A government issued id can be verified, and this gets closer but it's still only an approximation, not everyone has a government issued id.

There are also projects for decentralized notions of identity, issued and verified by peers, without any reference to a credential issuer like Twitter or a government, but these are still pretty experimental and it's hard to prevent them from being gamed.

murbard avatar Mar 29 '21 12:03 murbard

Another very simple way to deter this is would be that on the collectors page, it shows the piece X amount of times that they own it. Might be a simple detterent?

mimeArtist avatar Mar 29 '21 17:03 mimeArtist

Social measures take place after the damage has been done and tying identities to accounts isn't very compatible with blockchains. Smart contract / UI solutions might prevent most of the abuse, but if they wouldn't, here's an idea:

Subscribe to lottery with Twitter handle -> random users get picked -> accounts are bot-checked -> distribute NFTs

Producing twitter handles is harder than new blockchain addresses and they can be bot-checked. The disadvantage is that this solution requires more work, and sending the NFTs to an automated distributor is a potential risk. I believe part of the process can be done with smart contracts.

supaikumotcha avatar Mar 29 '21 21:03 supaikumotcha

Personally i think that UI restrictions could be easily bypassed (frontend mods, browser extensions, direct calls to APIs). It could work on the short term, but if the platform keeps growing I think this kind of stuff will eventually come out. I was suggesting on Twitter to let users decide if their works can be sold on the secondary market or not. Alternatively, putting royalties at 100% would solve the issue. In both cases the users choices should be reported on the work page for transparency.

JentoXYZ avatar Mar 29 '21 21:03 JentoXYZ

royalty at 100% is not a possibility in this version of the contract. the way to go would be make a sort of club factory with permissions in another smart contract.

crzypatchwork avatar Apr 07 '21 15:04 crzypatchwork

[I rewrote this so much I'm just re-posting it.]

Some of these proposals would eliminate reasonable exceptions. I'll detail an exception scenario below, but here's an idea: rude hoarders could be neutralized if giveaways were handled like auctions where an ask price of zero is possible (or even expected). Besides which, bids and auctions may be a feature that many users want.

In a giveaway auction, courteous collectors ask for 1 edition of an NFT for 0 tez (free). The issuer of the NFT would then approve or reject that request. Hoarders at a giveaway auction could ask for 100 editions for 0 tez, but they would be deterred from doing so because they would anticipate the issuer will reject the request.

Or here's another scenario; the exception I mentioned: a collector could ask for 5 editions for 0 tez, and explain to the issuer that they know other collectors who would love the NFT but who don't yet have wallets, and they promise to direct transfer one edition each to those collectors when they get wallets. (I have done this. I'm still nagging the collectors to overcome the technical hurdle of getting a wallet.)

Make the bids nonzero and you have a more traditional bid: a collector asks for 5 editions for 3 tez, for example. If another user sees that bid and asks for 5 editions for 4 tez (a higher price), then you've started an auction.

Maybe smart contracts could verify collector bids and issuer approvals/rejections via crytpographic signatures from both parties.

earthbound19 avatar May 01 '21 21:05 earthbound19

Hi, So a new o4o, new hoarders... I think we have all seen some more or less outrageous one lately (41 editions of SutuEatFlies one for instance, cf https://twitter.com/chopshopmusicgr/status/1436924973839433730?s=21)

And I was asking on the discord if edition count could be enforced at the smart contract level and borss pointed me to:

https://github.com/hicetnunc2000/objkt-swap/blob/master/smart-py/fa2.py

So we can check if the buyer already have the objkt in his wallet (balance_of) could we add an option for that? I'm not sure of what it involves and how it could be actually done.

melMass avatar Sep 12 '21 14:09 melMass