"Given enough eyeballs, all bugs are shallow"
~ Linus Tovalds, creator of Linux, the world's largest open source software project
-
GoalZapp is an Ethereum enabled web application allowing you to post personal goals and receive suggested steps from others toward achieving those goals.
-
Suggesters are rewarded with the ZAPP token for their contribution if you deem their suggested step valuable enough to be included in your list of steps
-
Like a crowd sourced, token incentivized, recipe for success for achieving your dreams...
- About The Project
- Usage
- Getting Started
- Roadmap
- Testing
- Contributing
- License
- Contact
- Acknowledgments
GoalZapp was designed with the intent to help people. Unlike other places on the internet where people turn for advice (ie. Reddit, Quora, StackExchange), GoalZapp features a crypto-financial mechanism to simultaneously incentivize quality contributions, and to disinsentivize both low-quality advice and financial speculators who errode intrinsic value of utility tokens.
-
The buy / sell price is a function of the amount of tokens in circulation (a.k.a. total tokens owned)
-
Buying a token:
- Money (ETH) is sent to the Bonding Curve Contract
- ETH remains in contract as collatoral
- Token is created (minted)
- Sent to buyer
- Added to the circulation
- Money (ETH) is sent to the Bonding Curve Contract
-
More tokens in circulation = higher token price
- (Interesting Side-Note: price is calculated dynamically. e.g. A single transaction to purchase 10 tokens costs a higher $ amount / per token, than a single transaction to purchase 5 tokens, because the purchase its self is augmenting supply and affecting the price paid)
-
Selling a token:
- Token(s) are sent to the Bonding Curve Contract
- ETH from collateral pool is paid to the seller
- Token is destroyed (burned)
- Removed from circulation
- Token(s) are sent to the Bonding Curve Contract
-
Fewer tokens in circulation = lower token price
View the graph in interactive mode to trace the price of the token at a given supply
- Initial Token Supply (s) = 128
- Balance of Contract (b) = .03359789 ETH
- Reserve Ratio (r) = .333333
- For standard point-slope reference
m = b / (r * s ^ (1 / r))
- For standard point-slope reference
Motivation: simple, intuitive, fair pricing with a strong mechanism for driving platform growth
Note: Parameterizing a bonding curve is very much an act of balancing priorities. Adjusting for how quickly price rises relative to the total amount of tokens purchased hinges on two competing priorities: financial incentive and accessibility. A curve that rises more gradually and evenly favors accessibility (more tokens can be bought at a relatively lower price; lowering barrier to entry). A curve that rises more quickly favors financial incentive (it's profitable to "buy now", because the price will escalate quickly). The chosen parameters as implemented favor financial incentive because profit-motive is seen as the strongest driver of network participation. Combined with the measures outlined below to limit speculative behavior, we hope to achieve the highest level of network participation.
Thought experiment: How do contributions with profit incentive compare with contributions based purely on intrinsic incentive (on platforms such Stack Exchange and Reddit)? Are those incentives mutually exclusive?
You can't sell or transfer the token until you use it first
Motivation: The people who buy tokens on GoalZapp actually use GoalZapp
Even after using the token for its intended utility (paying people for helpful suggestions on your goal), you still must wait to a period of 3 days to transfer it.
Motivation: This serves once again to protect the beneficiaries of the platform and add friction to financial speculators. Honest users are given further assurance that they will not fall victum to pump and dump schemes, strengthing the utility orientation of the token.
Here's how you can build a roadmap of steps toward achieving your posted goal; Or contribute your knowledge towards building the steps list of someone else's goal:
- Create a goal
- Add steps to your goal
- Reorder steps
- Remove Steps
- Suggest a step on a goal
- Suggest remove a step
- Suggest Edit a a step
- Accept a suggested step
- Decline a suggested step
- When you create a goal, you have the option to fund an escrow smart contract associated with that goal (you may fund the goal any time after creation)
- Attaching funds to your goal enables you to accept suggestions from other users
- Funds are used to pay:
- The reward amount to suggesters (set globally by administrator)
- The bond amount
- Bonds are utilized to incentivize engagment and prevent stale suggestions
- Bonds are only transfered between the goal escrow contract and the user who posted it
- Because bonds posted are effectively locked in a contract until a user takes action, they incentivize a user to return to any action they initiated
- Bonds are released even if a user fails to take action, by utilizing a timer mechanism (currently 3 days)
- Bonds are only transfered between the goal escrow contract and the user who posted it
- Bonds are utilized to incentivize engagment and prevent stale suggestions
- When you accept a step:
- The reward amount is automatically sent to a suggester
- The bond amount is returned to both parties (suggester and goal owner)
- When you reject a step:
- The reward amount remains in the smart contract
- The bond amount is returned to both parties (suggester and goal owner)
- To view goals created by other users, go to the Globalfeed page
- Click the goal of the user you're interested in
- On another user's goal page, you see that user's goal and corresponding steps
- You can:
- Suggest a step
- Suggest edit a step
- Suggest remove a step
- Suggest move a step
- At this time: only suggest step has an economic consequence
- When you suggest a step, you choose an amount to post as a bond
- (arbitrary bond amounts chosen by the suggester; > 1 token )
- Your Ethereum wallet will prompt you to accept a series of transactions
- These transactions include:
- Approval to move tokens from your wallet
- Subsequent transfer of tokens as bond to escrow contract
- These transactions include:
- When you suggest a step, you choose an amount to post as a bond
- Suggestions goal owners accept pay out 1 token to the suggester
-
Install a web3 provider | for example: MetaMask
-
Connect to the Ropsten testnet && have testnet Ether
-
Head to http://www.getgoalzapp.com
-
Create and account and login
- Integrate smart contracts to L2 roll-up Optimism
-
Install Docker and Docker Compose
-
Switch to branch dockerTestVersion
-
cd GoalZapp
-
docker-compose up
Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Distributed under the MIT License
Twitter: @_zach_michaels
Email: contact@zachmichaels.dev
Project Link: https://github.com/zach-is-my-name/GoalZappEthereum
- Simon de la Rouviere
- Bancor
- For creating and contributing the essential formula that make bonding curves possible in Solidity github
- Slava Balasanov
- For laying out in technical terms how bonding curves work medium
- and personally answering questions
- Billy Rennekamp
- For conveying bonding curve technical terms and formulas in a simplified way medium
- Karl Floersch
- For keeping the flame of altruism through applied technology