GithubHelp home page GithubHelp logo

simondlr / mememarkets Goto Github PK

View Code? Open in Web Editor NEW
36.0 10.0 9.0 199 KB

A protocol for the decentralized monetization of *all* information (memes) and its network effects.

HTML 0.58% JavaScript 98.85% CSS 0.58%

mememarkets's Introduction

29 May 2017 Update/NOTES

Meme Markets is a coupon-based continuous token model. A follow-up iteration that I'm currently working for the time being is called "Curation Markets".

Check this out instead: https://github.com/consensys/curationmarkets.

This iteration below is not a priority atm. The Curation Markets repo has more info on the new model.

Meme Markets (Alpha)

(NOTE: This is currently very WIP. The code/dapp won't run as is atm. Take with a pinch of salt until finalised for test release).

Meme Markets is a decentralized protocol built on Ethereum that allows the decentralized monetization of all information and its network effects (memes).

One can tokenise interest in memes such as #ethereum, #simondlr, #vitalikbuterin, #harambe, #trump, #globalwarming, #football, #capetown, #USA, #twitter, #tcpip, #apple, #freemyvunk, etc without the requirement of a centralised intermediary.

By following a coded protocol in a smart contract that aims to express natural interest in a meme, it allows the tokenisation of said meme. Users dispense money (ETH) for action coupons in a meme according to a cost set by this coded/unchangeable algorithm, upon which they can then dispense the action coupons for services in the network of that meme. Action coupons for a specific meme becomes more costly as interest in that meme grows.

By having no centralised intermediary, not requiring current legal systems to provide services (such as incorporation of an organisation) & a more visible & common focal (schelling point), it reduces the barrier to entry to coordinate economically across the internet. The hope is that will provide new forms of agency to many people: from the birth of new kinds of organisations, new communities, personal markets and even better coordination around solving some of the world’s biggest problems such as global warming.

Protocol Design (Alpha)

The alpha protocol (v0.1) currently works as follows:

-> A user can buy an action coupon in a meme with ETH (#simondlr, #ethereum, #apple, #footbal, etc).
-> The cost of the coupon is dependent on how many action coupons are currently in supply for that meme. This algorithm is set in stone for each meme. It accrues linearly until a point where exponential costs take over. It's designed such that is unlikely (too costly) that any meme will have an outstanding supply of more than 10m coupons.
-> Action coupons are dispensed for actions in the meme (anyone can build any app on top of this protocol to make the coupons usable/worth something).

-> The beneficiary of the ETH used to buy the coupons are chosen by the buyer. -> Funds are locked for 1 month to avoid potential sybil attacks. This is a magic number and potential protocol improvements can be made.

The whitepaper of the protocol design can be found here: https://docs.google.com/document/d/1CKK2jBYToHfkDM1XH4uVCSjXqOB6LxH8KdZbp8JHkqI/edit?usp=sharing (slightly out of date atm).

The purpose of this alpha is to test assumptions about the design and also to foster discussions on improving the protocol before releasing it more widely.

Technicals

This is built using Truffle 3.x.

Solidity API:

There are 3 contracts:

MemeFactoryAndRegistry.sol

This keeps track of the namespace of memes and the creation of a token contract for a meme (if it hasn't been created yet).

function approveContractForAllMemes(address _contract)
function revokeContractForAllMemes(address _contract)
function createMemeToken(string _meme)

MemeToken.sol

It uses ERC20 token standard as the base layer for each meme (transfer, approve, etc). It adds several functions around minting and dispensation of action coupons in each meme. The important API functions are:

function mint(uint256 _amountToMint, address _beneficiary) payable
function dispense(address _for, uint256 _amount)
function mintAndDispense(uint256 _amountToMint, address _beneficiary, address _for, uint256 _amount) payable
function claimFunds() returns (bool success)

To build a dapp, you must let the users of your dapp approve your contract so that it can dispense coupons for any meme (in the meme markets). Otherwise, it works like a normal ERC20 token. You can approve a dapp for a specific meme as well (usual ERC20), rather than all memes.

The Noticeboard Dapp

The first dapp built on Meme Markets is a Noticeboard dapp. You dispense action coupons to upvote something on the noticeboard of that meme. Most upvoted remains the highest. Nothing fancier for now.

Development

Most of my time is spend Ujo atm & working on security/auditing of smart contracts @ ConsenSys. The plan is to try and dogfood development of meme market with meme markets itself.

The contract code has been finalised with tests being written atm. The front-end is currently being developed as well.

Disclaimer

It's very important to note that this is alpha software, and it can change/evolve as time goes on. Have fun. A testnet release is coming soon. Check out #mememarkets (when it is live) for paying action coupons towards development of Meme Markets itself.

*This code is licensed under MIT.

mememarkets's People

Contributors

simondlr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mememarkets's Issues

Discussion: Protocol Design Alpha MVP

Current Protocol Design Alpha MVP:

-> Pay ETH to mint a token for a meme (#simondlr, #ethereum, #apple) according a pre-defined cost curve.
-> The ETH is paid to a beneficiary of their choosing.
-> The ETH is locked up for a month before being able to be withdrawn by the beneficiary to "somewhat" mitigate sybil attacks (paying yourself the whole time).
-> The cost curve algorithm is:

costOfCoupon = (BaseCost + BaseCost (1.000001618^AvailableSupply)+BaseCost*AvailableSupply/1000)

BaseCost = 100000000000000 wei aka 0.0001 ether

-> Tokens are dispensed for actions in that meme's network (eg upvoting text on a communal noticeboard).


Any thoughts/ideas around the current protocol design? Burning? Deposits? Think wild!

eg: A variant is to have there only be 1 beneficiary and the meme's tokens are used to upvote how the funds for a timeframe should be split.

Change name?

Unfortunately, the original, less understood meaning of the word "meme" encompasses it perfectly. However, the internet has ran away with the meaning (ironically).

a meme is:

an element of a culture or system of behaviour passed from one individual to another by imitation or other non-genetic means.

The previous name was hashtag markets to encompass that it's not really about internet memes, which would only be a subset of all possible memes in meme markets. Hashtags also simplify potential ambiguity on naming (aka, no spaces).

Any other names?

What should happen with the burned funds?

As part of the current protocol design, funds are burned when paying to beneficiaries of a meme, in such a way that incentivizes beneficiaries that provably foster the meme. It's a schelling point game to give funds towards beneficiaries that are more likely for the meme to attract attention. If it is the most received beneficiary, they receive more of the funds, and less is burned.

The fee/burn to orchestrate can be used in interesting ways:

  1. Provably, and totally destroy the funds.

  2. As an overall meme markets reward. In other words, using meme markets itself, one can own a portion of the meme markets fees that are burned. #mememarkets would become a special/unique meme. Buying action coupons in this meme entitles one to the burned fees of all memes on the whole platform. This seems nice for early adoption, but a core purpose of the meme markets design is to not overly reward early adopters too much.

  3. An action coupon can be dispensed and given back a portion of the burned pot (what portion this should be, is uncertain). Thus, one can get back one's ETH if one wants to leave, but at a cost.

Any other ideas?

More granular approval schemes?

Currently, in order for a dapp to work, meme tokens need to be dispensed for actions. Currently, there's a blank approval for all meme tokens for your balances per contracts and then there is the usual ERC20 approve, which is approving-per-meme. Aka, "I want to use the noticeboard application, but only give access to dispense on my behalf for the #simondlr meme, not ALL memes."

Are there perhaps a middle ground here for safety? Protecting against a malicious dapp not stealing ALL one's meme tokens?

Implement functionality to safely upgrade/move to other meme namespaces (memespaces).

It is likely that some code/algorithms in the first iteration is not the best and final form and someone invents a better meme market ecosystem (say, a better algorithm, or a better protocol to foster meme tokens, or a better beneficiary system).

There's not only schelling points on the memes themselves, but also the protocol behind the meme markets.

A new meme market ecosystem will want to bootstrap upon a previously existing meme market namespace/reality.

Consideration needs to be given that it would be relatively easy to move one's meme tokens over to another memespace if that new memespace allows it.

ie -> Version 0.1 of Meme Markets has an inefficiency and v0.2 of meme markets solves that efficiency.

I have 5 #simondlr tokens, and v0.2 allows me to burn these 5 #simondlr for v0.2 tokens. Perhaps due to algo changes, I might only get 4 #simondlr after porting to a new memespace, or only have a limited time to do so.

Currently, ERC20 designs allow this porting functionality reasonably well, but there might more blanket ways to port and move tokens to other potentially better memespaces.

Enforce no spaces in memes?

Hashtags have proven that ideas/memes can be encompassed relatively well/okay with no use of spaces. This would make it less ambiguous if enforced. Would likely be costlier to mint a meme since StringUtils need to be utilised.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.