artonomous / artonomous-mvp

A Self-Owning, Self-Sustaining, Self-Improving Autonomous Artist Using the Ethereum Blockchain
158 stars 21 forks source link

OLD: Implement Art Auction Smart Contracts #2

Open simondlr opened 6 years ago

simondlr commented 6 years ago

The 'Art Auction' implements the logic used to start an auction for a generator. Once a generator has SOUL tokens stake to it, it can start a daily art auction.

EDITED & Up to date on 30 June 2018:

ORIGINAL POST:

simondlr commented 6 years ago

A portion of the pool can be used to pay people to start auctions if the previous art piece has been claimed/bought.

tarrencev commented 6 years ago

Couple questions to clarify:

The Art Auction initiates a linear decaying price function towards zero based on the previous sale * 5%

Is this previous sale + previous sale * 0.05?

It can be instantly claimed for any price above the previous art auction.

If the assumption above is true, it seems it would be the same as having a fixed price for the first 1.2 hours at previous sale price then doing the linear decay auction for the remainder, since there is no incentive to buy at a 5% premium.

Let me know if I'm misinterpreting something :)

simondlr commented 6 years ago

It can be instantly claimed for any price above the previous art auction.

Yes. Hmm. Understand the confusion. I didn't think through fully. The goal is to allow the price of the art to rise faster than 5%. It might start rising faster than 5%, and thus any new art auction will be immediately bought when it opens. It should adapt to price discrimination better.

Perhaps there's a better price adaptation. How about something like:

New art auction starts at price:

previous sale + (previous sale * ((1440 - <minutes elapsed>)/1440)

Thus, it would be max double of the previous sale if its immediately bought. If it's bought halfway through the auction, it's up 50%.

What do you think?

tarrencev commented 6 years ago

I like that. So in the case that an artwork is unsold, and someone claims it at ~0 eth, the system essentially resets. Probably a good thing since compounding numbers get big fast

simondlr commented 6 years ago

So in the case that an artwork is unsold, and someone claims it at ~0 eth, the system essentially resets.

Yes.

But, the zero price ETH options doesn't allow the auctions to rebalance appropriately after such an event happens.

I feel there needs to be a way to let a buyer set any price and have that be factored in somehow. That might lead to better price discrimination. You don't the max price to be like $5 after it collapsed and then people can immediately resell it for like $1000 afterwards.

But that also adds too much complexity, imho.

Needs some more thinking. The simplest is to just stick with pricing increasing function and have a floor. Say $10 for the art. Or have the floor somehow be tied to curve for the soul tokens.

Rambling a bit, but want to keep it simple to start with. It should ultimately just reflect increased demand appropriately.

tarrencev commented 6 years ago

Yeah I agree that a collapse is maybe a bit too destructive. Maybe we could use a running average of the past n auctions? That would make the starting price less sensitive to one particular auction while not introducing much complexity.

simondlr commented 6 years ago

That seems the best, yip.

simondlr commented 6 years ago

Updated top post to reflect changes.

markusbkoch commented 6 years ago

As mentioned in #26:

As the start-auction transaction is being processed, the hash of the block it will be included in is unknown. The hash of the previous block could be used, but then people would know the hash (and thus the art piece) before they start the auction, and could decide on whether or not to start it based on that information. So an interesting design for extracting randomness from block hashes is to use the hash of a "future block". In cryptokitties, the breeding transaction defines the future block (breeding block + cooldown period). From the point of view of the birthing transaction, that is a block in the past, so its hash is available (for 256 blocks). Different implementations could achieve the same result in artonomous, such as one auction defining the block of the next, or having two separate transactions to start an auction (something like schedule+start). Clearly defining and simulating them would allow one to prove and/or estimate how well they meet the requirements and what impact they have on other parts of the system.

So if I understand it correctly we need to give some more thought to the current proposed design

The blockhash used in the art generation is determined at the start of auction. Once claimed, the an ERC721 version of the art that is created.

This can wait until requirements have been further detailed and documented, but I just wanted to bring this up on this issue, where IMO it belongs, as the topic came up incidentally at #26.

simondlr commented 6 years ago

Just adding to the convo here too. If #20 is resolved, we can keep it as block.number (just want another voice to confirm before closing).

mzargham commented 6 years ago

@markusbkoch and I have also been doing some data science collaborations with a researcher from Northwestern University studying the auction behavior in the cryptokitties game. The main conclusion in the paper is that pricing is very effectively explained by a Keynesian Beauty Contest. A well known concept in game theory.

Given that reference point of the behavior of NFT auctions, I'd like to see this discussion move in the direction, auction models that intuitively, and ideally mathematically make sense in this context. Assume, our goal is for artonomous to be as profitable as possible while keeping a good user experience. An ideal solution would also be strategy proof aka "truthful" but it is as yet unclear to me if this can achieved. I am going to think on it some while I am traveling this week.