Merge Rewards (BETA)
Earn money with your Pull Requests on GitHub!
Merge Rewards is a fully automated service that lets you earn STEEM with your merged pull requests on GitHub.
Website and Bot
Connect your GitHub and Steem accounts and claim your rewards by simply clicking a button.
As easy as it gets!
You don't need to write a post about the work that you already did and you don't need to wait for a review process.
The website lists your pull requests, calculates a score and generates STEEM for you as soon as you click the "claim" button. Simple!
The Score Algorithm
The algorithm to calculate that score is of course the most essential and crucial part. For now it's really simple and abusable but over time a variety of improvements will be implemented.
Currently the code you contribute isn't of any relevance. One reason is that it's not an easy task to automatically evaluate code quality properly. The other reason is that the project's popularity is at least as important and the quality of the code itself (or whatever the pull request contains) will be ensured implicitly by project owners who decide what to merge and what not.
Merge Rewards uses only meta data to calculate scores and the scores are not based on the amount of work but on how many people benefit from it.
A small bug fix in the Linux kernel affects much more people than the next big and bloated feature set in a project that is used by only a few people.
I understand that sometimes the small projects of today are the big ones of tomorrow and sometimes the value of a project can not be measured by it's popularity. But Merge Rewards is not supposed to be perfect from the start. It's supposed to evolve.
So, this is the first simple version of the score calculation:
if (userAge > 365) points += 1; if (userAge > 365 * 5) points += 2; if (mergedPRsLastMonth > 2) points += 1; if (mergedPRsLastMonth > 10) points += 2; if (repoAge > 90) points += 1; if (repoAge > 365) points += 2; if (repoStars > 50) points += 1; if (repoStars > 250) points += 2; if (repoForks > 10) points += 1; if (repoForks > 50) points += 2; return Math.round((points / 15) * 100);
Really stupidly simple but as you can see, there are also factors like your GitHub account age or the age of the repository. I have a lot more metrics in mind to make the algorithm more fair and flexible. I also plan to give project owners a chance to affect the score.
Here's a list of possible improvements:
- Does the PR close an issue?
- Were there additional commits made after the PR was created?
- How many comments are there?
- Did the project owner react with specific emoticons or with a special command? (Something like: !mr xs/s/md/l/xl)
- How many other projects use this repository?
- How many other contributors are there?
- To what other repositories did you contribute.
- How many followers do you have on GitHub?
- To how many DIFFERENT repositories did you contribute
- in the last month
- keep alive bonus: last commit to the repository is older than 1 year
Etc... The GitHub API offers a lot of data that wants to be used.
Once you've claimed rewards for one of your pull requests, a comment is posted to the blockchain and a bot votes on them. This bot is mostly based on something that I wrote almost a year ago for Utopian. Unfortunately they never used it so I'm glad to have some purpose for it now. On the other hand it needs some adjustments. I already removed all the Utopian specific code but I also need to change all the voting power related stuff to adjust it to the "new" resource credit system. I haven't been active for a year so for me that's new. The bot kind of works for now so I'll postpone this a little bit.
Basically it behaves like this:
- It waits until X posts have piled up (intended Wait List).
- It upvotes one post at a time / per run (every minute). First in first out.
- It upvotes as long as X posts (or more) are on the Wait List and Voting Power is above a fixed minimum.
- Next post in line reaches a specific age: Vote will be forced.
- Voting Power reaches a fixed maximum, slightly below 100 %: Vote will be forced.
- The Voting Weight is determined by the PR's score.
- If contributions pile up or get less, the bot speeds up or slows down by lowering or increasing the weights automatically.
Read more in the Readme.
Well, there are not many hard requirement for PRs except they need to be merged in the past 14 days (For the start I set it to 90 days!) and for a repository other than your own ("own" means administrator rights). And there is no human factor at all so abuse might become a problem. This is why the scoring algorithm needs to be smart. I think with the factors I use currently it is already too much effort to abuse the system compared to the rewards which are currently none because there is no Steem Power in the account.
But I want to invite everybody to try and to help to make it more immune to abuse.
Currently you can "easily" fake a 60 % score by:
- creating a repository
- submiting more than 10 PRs to it (can even be from same account)
- fake/buy 250 stars and 50 forks
If your GitHub account is a bit older and you have some old repositories there, you could even reach a 100% score.
Better Website and Branding
The current website is just a quick "make it work" thing. I will put all my design and marketing skills (no matter what that means :D) into giving it a professional look and feel and the best possible user experience.
Show Estimated Rewards and Bot Status
Currently the website shows only the score of a PR. The estimated vote value could be next to it. As there is a waiting list and the possibility that the bot "overheats", it's status can be shown on the website as well.
Since Keychain seems to be sorft of a "first class citizen" in the Steem ecosystem, I will integrate it as soon as possible. But this also means I cannot rely on Steemconnect's comment function. So the changes affect more than just the login mechanic.
Although this whole project is about automating some parts of Utopian, it doesn't mean that you can't have both.
When claiming your rewards you will be able to author a post which will be automatically tagged for Utopian and prefilled with their post template.
On the other hand I could also integrate Utopian posts by looking for URLs to merged PRs somewhere in the post content.
The website will show projects that invested in Steem. This investment will be Steem Power of a separate account to increase the rewards for contributions to this project.
Automatic Reward Claiming
If you grant offline access to your account, rewards can be automatically generated once your pull requests get merged.
Changing Root Post / Statistics Posts
Currently the PRs are represented by comments of a specific post from the @merge-rewards account. This post could automatically change by posting a new "root" post every X rewarded PRs or in a fixed interval to show some statistics. The first root post is this one by the way.
A browser plugin could render a claim button directly on github.com on your pull requests page.
Some sort of bot that automates communication with project owners.
If somebody can explain to me what the exact benefits of an own token really are, maybe that's an option. But to my understanding it's only... let's call it prestige and more difficult to cash out.
AI for Scoring
Ok, this might sound a little bit far fetched but actually all it needs is training data and a lot of metrics. The metrics should not be the problem. The training data maybe is, because it needs humans to review the results of the scoring algorithm. But think of it as a "shifted" moderation process.
Other platforms than GitHub
Does that make sense? I don't know. Bitbucket maybe? Is there any other platform than GitHub with a considerable amount of open collaboration?
And so on...
I think there's a lot of potential and room for improvement in this, especially regarding the scoring algorithm. And I'm sure I had some ideas that I didn't write down anywhere and now I forgot. The best thing is, this project has a built-in incentive mechanism to improve it. Maybe I'll even give some extra points for PRs for this project. :D
Obviously this whole thing can only work with a considerable amount of STEEM POWER. I am not rich so I can't power up this account to that level. I just delegated 100 SP to make sure there's enough RC for the start.
Until now there's no mechanism to reward delegators and maybe there won't be one. I will set all posts from this account to 100 % SP payout. So you can also support the project with big upvotes on posts from @merge-rewards. A direct delegation is of course the most needed way of support for the time being. I will also try to find investors but actually I don't like that kind of work so much so maybe that's not going to happen.
Currently 50.000 SP would result in up to 1$ in rewards for a pull request. That is the goal for now!
Currently this project is in PROTOTYPE stage! I called in BETA in the title because it sounds better and actually it can be used already. BUT... please see this as a project that we can develop together. If there is some bug preventing you from getting your rewards, fix it and get rewarded for that! If you think the scoring algorithm is stupid just submit a PR and let's discuss it there as well.