1/ Meme Bounty: Introduction

Scottworks
7 min readAug 26, 2018

This is a series that dives into the inner workings of the Decentralized Application Meme Bounty:

What Is Meme Bounty?

Memes have quickly become a source of entertainment for everyone living in the internet age. Everyday new meme formats are created and thousands of meme creators publish their content to platforms like Reddit, Imgur, Facebook, etc. These platforms allow users to upload content and provide ranking systems and SEO for popular memes, this in-effect only does two things. Boosts the creators internet fame, and drives more traffic to the platform. The former is a benefit that is incredibly difficult to capitalize on, a creator would need to effectively dedicate a lot of their own time and energy into creating memes before capturing any value (if they ever intend to do so), whereas in the latter case platforms are designed to capture value from millions of popular threads while operating at scale. This seems a bit one-sided which is why I created meme bounty. Meme bounty aims to provide a monetary incentive to meme creators and meme curators alike.

Meme Bounty consists of three main players; Bounty Posters, Challengers, and Voters. As a Bounty Poster I can create a new Bounty for a specific type of Meme, or describe a new Meme format. After the bounty has been posted Challengers will upload their challenge to IPFS, which will return a URL that is stored into the Ethereum blockchain. Finally Voters will go through a process of submitting up-votes in the Commit and Reveal stages (explained in 2/ Meme Bounty: Design Patterns). At the end of the Reveal stage the winner is determined, the winning Challenger will be able to withdraw their earnings. Voters who staked Ether on the winning challenge will be returned their original deposit plus the deposits of those who staked Ether on losing challenges.

Project Inspiration

This idea is based on the concept of Token Curated Registries, one of the many Crypto-Economic Primitives that have arisen over the past year. The top-level concept of curating content through votes was a source of inspiration. while this is how other platforms currently operate there is no penalty for being wrong and there are no repercussions for vote spamming. Applying a cost to voting is the innovation of TCR’s however there are a number of issues including vote memeing (not related to actual memes), objectivity, and reputation.

There is no doubt that Meme Bounty has all of these issues, in fact vote objectivity is non-existent whether or not you “like” something is completely subjective and therefore many problems can and will arise from this. My goal in this project was not to try to solve any of these issues but to explore the concept while practicing concepts I have learned with regard to Decentralized Application Development. For more information on TCR’s please see the reading list below:

Meme Bounty Rules

  1. Interactions are time-gated in stages; Challenge, Commit, Reveal, Withdraw. Actions outside of their stage are not allowed and therefore restricted.
  2. Each account is permitted to make one challenge.
  3. If two challenges receive the same number of votes, the challenge submitted earliest will be the winner.
  4. By default there is a 5 minute delay between the Reveal and Withdraw stages. This is only for Development and Testing purposes.
  5. There are no limits on the number of up-votes per user

How To Play

Once the application has been successfully launched using the steps provided here, you will be presented with the landing page.

After we select the plus button next to “Bounty Board” the bounty form will appear. I have been working with React.js all year so I want to see some memes for it…

After the form has been completed and submitted MetaMask will request that I sign the following transaction.

The new bounty will appear on the Bounty Board with the status and details pertaining to that specific bounty.

After logging into a different account, I uploaded a submission to IPFS which returns with a hash that can be used to locate the image.

I added two different memes, from two different accounts (the first one is my own creation).

When the Challenge Stage has ended the Commit Stage will begin. Now it is time to add some up-votes.

I really like my own meme so I will upvote it three times from a separate account. The other meme isn’t bad either (I’ll admit I’m a Will Ferrell fan), so I will add one up-vote to it as well from a separate account.

The Account address, Challenge address, and salt for each up-vote are stored in the browsers Local Storage.

Once the Commit Stage has finished the Reveal Stage is active.

Selecting the “Reveal Upvotes” button will take all of the Challenger address/ Salt combinations and send them to the smart contract where they are hashed again and compared to the stored hash. If they match an up-vote is cast in favor of the Challenger corresponding to the address. Please note that MetaMask will ask you to sign two transactions per vote, one which pays for the vote itself and another covering the gas cost.

The data stored in Local Storage is also updated to show the number of up-votes had been cast.

Finally, the Withdrawal Stage has arrived, time to claim earnings.

It is important to note that as a Voter the Withdraw will require you to sign each withdrawal as the client is requesting a withdrawal from the smart contract for each vote that had been cast before. If you did not vote for the winning challenge MetaMask will return with an error and you will not be able to withdraw funds.

We came out on top in this case, however if the cost per vote is very low it is possible that the gas costs will far outweigh any earnings.

The Challenger has been rewarded for their wonderful meme contribution.

Local Storage is zeroed out so that the Voter cannot make the mistake of requesting a withdrawal again.

--

--