Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ERC 891: Mineable Distribution Layer #891

Closed
OFRBG opened this issue Feb 20, 2018 · 25 comments
Closed

ERC 891: Mineable Distribution Layer #891

OFRBG opened this issue Feb 20, 2018 · 25 comments
Labels

Comments

@OFRBG
Copy link

OFRBG commented Feb 20, 2018

Preamble

ERC: 891
Title: Mineable Distribution Layer
Author: Oscar Fonseca - hiro@cehh.io
Type: ERC
Status: Draft
Created: 2018-02-20
Requires: ERC20

Simple Summary

The objective of ERC891 is to give developers an alternative method to distribute ERC20 tokens.

Abstract

The ERC891 provides an extension for ERC20 tokens that adds an interface for distribution. ERC20 tokens are often distributed via auctioning or airdrop, both of which fueled a bubble during 2017 and empowered exit scammers. With ERC891, the distribution model can be adjusted between the traditional ICO model and fully decentralized, PoW distribution.

Motivation

The traditional ICO model has brought problems that have damaged the blockchain ecosystem. The latest statistic was that more than half of the ICO projects are doomed. From the point of view of blockchain users, restoring trust in distribution is vital for adoption. While we know that the ledger's transactions are trustless, DApps and adoption do require it.

Specification & Methods

The ERC891 extends the ERC20 token.

Extension Methods for ERC891

checkReward

function checkReward(address) view public returns(uint256);

Get the potential reward for address.

claim

function claim() public;

Send the transaction that will make the balance of the token effective at address of the amount returned by checkReward().

claimWithSignature

function claimWithSignature(bytes _sig) public;

Submit a transaction signed by an address a in order to claim a's balance into msg.sender.


Notes on Reward Functions

The axis of ERC891 is the claim method. There are several consideration when deciding how to design both mine and checkReward.

  1. Each address should be mineable once. This is simple to achieve with a mapping(address => bool) mined contract variable.

  2. The claim() function should be predictable in gas prices. This allows miner to systematically know how much ETH is needed to complete the mining cycle.

  3. The checkReward() function should be only a function of the address and the total supply. The current sample implementation obtains the reward amount with

function checkReward(address) view public returns(uint256){
  return uint256(bytes20(a) & 255);
}

thus distributing reward amounts uniformly between 0 and 255 units. However, developers may opt to "increase" difficulty by implementing a function such as

function checkReward(address a) view public returns(uint256){
  return uint256(bytes20(a) & 255) == 0 ? fixedReward : 0;
}

in which the reward becomes fixedReward but is found only with a probability of 1/255. Finally, developers may choose to limit the supply by defining the reward function as

function checkReward(address a) view public returns(uint256){
  return (maxSupply - totalSupply_) >= uint256(bytes20(a) & maxSupply) ? fixedReward : 0;
}

In order to move closer to the traditional ICO scheme, checkReward() could look like the following examples:

function checkReward(address a) view public returns(uint256){
  return msg.value * multiplier;
}
function checkReward(address a) view public returns(uint256){
  return isPatreon(a) ? uint256(bytes20(a) & 255) : uint256(bytes20(a) & 255) * 10;
}
@OFRBG OFRBG changed the title ERC889: PPoW Token Extension ERC 889: PPoW Token Extension Feb 20, 2018
@OFRBG OFRBG changed the title ERC 889: PPoW Token Extension ERC 891: PPoW Token Extension Feb 20, 2018
@tawaren
Copy link

tawaren commented Feb 20, 2018

Why is this pseudo? Isn't this just normal proof of work but instead of generating tons of hashes and checking if they win something I generate tons of private keys and check if the corresponding address wins something.
A user that uses this transparently has no chance of keeping up with users that know that this token is minable so it makes nearly zero sense to call mine implicitly from check balance and transfer. Because either the user has a real chance of getting something with a few addresses in that case so many tokens will get minted that a huge inflation takes place or the user chance is so small that it is not worth the extra gas paid for the mine() function.
Do I miss something?

@OFRBG
Copy link
Author

OFRBG commented Feb 20, 2018

It is true that a "normal" (compared to a miner) user will be at a disadvantage compared to miners, but that isn't a problem. Look at Bitcoin or Ethereum. If anything, it makes the system more even because, even without mining pools, users can get tokens.

The importance of the transparency is that all the existing interfaces don't need to add special cases or update to make a transition. Normal users will simply see an airdrop to their addresses.

Addressing the huge inflation, that is up to the developer. As explained at the end of the proposal, the checkReward function can make the necessary adjustments to cover the developers' needs. If value is the priority, then a function like the last one is more fitting. If a low entry barrier is preferred, the developers may opt to use the first example.

Since the objective is not to make people rich, but to make a port of PoW to token space, this covers the basics. I called it PPoW and not PoW because PoW already has an implicit reference to blockchain hashing PoW. The addition of pseudo is to make clear that PPoW does not create a blockchain.

@alexvandesande
Copy link

I don't get this proposal. The only advantage I can see on using PoW for a token distribution is if somehow the algorithm is designed so it's feasible to mine on consumer desktops, not GPU or ASIC farms. The Monero algorithm, for instance has been so successful on that front that it's sometimes used as a replacement for ads in websites. I'm still not convinced the "crypto miner.js" revenue model will work at scale but it's interesting to see people experiment with random token distributions.

This "pseudo" proof of work is just favoring traditional ASIC farms, as you basically need to generate addresses until you find some with rewards on them. This is not very user friendly either, as an end user would end up with tons of addresses and would have to send them to their own addresses

@nateawelch
Copy link
Contributor

Yeah, I'm not really getting the point of this, either. With real PoW, the work is actually how the network is secured, and the miners are rewarded for securing the network. This "PPoW" is just the same thing but with no purpose. It's just burning electricity to burn electricity. Why not just allow people to purchase the tokens from the smart contract? It'd be the same thing without the wasted energy. You could even just have a "mine" function that gives a fixed amount of tokens (or dynamic based on how often the function is being called) that doesn't require electricity being wasted.

@tawaren
Copy link

tawaren commented Feb 21, 2018

The last checkReward function is inconsistent as you can lose money in the transparent case because between when you call getBalance() totalSupply_ may have another value to when you call it the next time or call transfer().

@Arachnid
Copy link
Contributor

Arachnid commented Feb 21, 2018

Is this actually "proof of work"? It reads more like an airdrop - and one that's exceptionally susceptible to sibyl attacks.

@OFRBG
Copy link
Author

OFRBG commented Feb 21, 2018

@flygoing @alexvandesande This doesn't solve the problem of distribution. It's more about this: https://coinmarketcap.com/coins/views/all/. There are hundreds of clone PoW. If some people will make them anyway, allowing bundle mining would reduce electricity wasting in the big picture.

@flygoing I think mint-on-demand tokens already exist. However, there is the question of where the paid ETH goes and also doesn't address what I described above: migrating polluting chains for bundle mining.

@tawaren Users would only lose money if they haven't actually claimed their balance. Once claimed they won't lose it.

@Arachnid It's an airdrop for existing and future users and a PPoW token for people who want to mine. Once again, this isn't meant to solve the distribution problem, but the big picture of the blockchain ecosystem.

I think we are all aware of the limitations of tokens compared to standalone blockchains. I think that extending token capabilities would be beneficial in the long run. While this implementation is far from perfect and doesn't solve the identity problem, I hope it works as a starting point that will motivate further development of this concept. In general I don't think many people will switch to PoS because of their views.
PPoW would offer a middle ground. The miner base already exists on launch, and a new chain wouldn't double the electricity spending. This benefit would be more noticeable as more chains migrate to ERC 891. This doesn't aim to be the last step of this development, but a starting point to motive this research.

@Arachnid
Copy link
Contributor

It's an airdrop for existing and future users and a PPoW token for people who want to mine. Once again, this isn't meant to solve the distribution problem, but the big picture of the blockchain ecosystem.

How is it any kind of PoW? I don't see any mechanism to mine using proof of work described here.

@OFRBG
Copy link
Author

OFRBG commented Feb 21, 2018

How is it any kind of PoW? I don't see any mechanism to mine using proof of work described here.

It is because the core problem is solved by hashing private keys into addresses. It doesn't secure the Ethereum network, hence PPoW.

@Arachnid
Copy link
Contributor

It is because the core problem is solved by hashing private keys into addresses. It doesn't secure the Ethereum network, hence PPoW.

Are you referring to the existing process of deriving an address from a private key? That's not any kind of proof of work.

@OFRBG
Copy link
Author

OFRBG commented Feb 21, 2018

Are you referring to the existing process of deriving an address from a private key? That's not any kind of proof of work.

That's why I called it "pseudo" PoW. You being rewarded for proving you did some work. The concept of PoW has been so strongly linked to blockchain mining that it has become to some extent a synonym.

@alexvandesande
Copy link

This doesn't solve the problem of distribution. It's more about this: https://coinmarketcap.com/coins/views/all/. There are hundreds of clone PoW. If some people will make them anyway, allowing bundle mining would reduce electricity wasting in the big picture.

Wow. So there are tons of coins that use PoW without any real understanding on why it exists, so let's simply simulate PoW on ethereum for no reason at all for coins that have absolutely no idea how a blockchain work but that really want the same PoW thingie that bitcoin has.

cargo3
White men built big planes and got drop cargo. We also build planes and wait for cargo to drop.

@Arachnid It seems they call it Proof of work because it's doing hashes to derive a public key. So if you generate a billion accounts to find one reward, then it's "proof of work" in that sense.

@OFRBG
Copy link
Author

OFRBG commented Feb 21, 2018

Wow. So there are tons of coins that use PoW without any real understanding on why it exists, so let's simply simulate PoW on ethereum for no reason at all for coins that have absolutely no idea how a blockchain work but that really want the same PoW thingie that bitcoin has.

If those coins are going to happen anyway, at least curb their range of influence. Not because Ethereum is taking the moral high-road others will follow. If you really care about the electricity being wasted, give those coins a way to be unified, and even some of those polluting coins might show their worth thanks to easier access. Give current PoW coins a reason to join. Tolerance of different opinions is a sign of maturity. PoW coins that join under Ethereum's rules.

@Arachnid
Copy link
Contributor

That's why I called it "pseudo" PoW. You being rewarded for proving you did some work. The concept of PoW has been so strongly linked to blockchain mining that it has become to some extent a synonym.

Deriving an address from a key, or signing a message, are not proofs of work. They also lack any kind of difficulty adjustment mechanism, do they effectively become an invitation for massive Sibyl attacks to get free coins. I simply can't see how this would be in any way useful.

@OFRBG
Copy link
Author

OFRBG commented Feb 22, 2018

Deriving an address from a key, or signing a message, are not proofs of work. They also lack any kind of difficulty adjustment mechanism, do they effectively become an invitation for massive Sibyl attacks to get free coins. I simply can't see how this would be in any way useful.

Difficulty adjustment is up to developers to implement. As mentioned before, I showed an example with difficulty adjustment based on total supply. The implementation is flexible, and could even take block number into account, but I do not recommend that.

@Arachnid
Copy link
Contributor

Difficulty adjustment is up to developers to implement. As mentioned before, I showed an example with difficulty adjustment based on total supply. The implementation is flexible, and could even take block number into account, but I do not recommend that.

There's no mechanism for adjusting difficulty in your EIP - only the reward. These are not the same thing at all.

This is not any form of proof of work.

@alexvandesande
Copy link

alexvandesande commented Feb 22, 2018

https://coinmarketcap.com/coins/views/all/. There are hundreds of clone PoW.

You are looking at the wrong list, see this: https://coinmarketcap.com/tokens/views/all/ Not a single PoW token.

Here's how suggestion on how an ethereum token can be "Pseudo-PoW" without being bad on the environment. Add a function like this:

function claimReward() {
  require(!rewardGiven(block.number));
  balanceOf[block.etherbase) += reward;
  rewardGiven(block.number) = true;
}

This allows any Ethereum miner to also claim rewards on your token. Since ethereum is PoW, then this would make your token also a PoW.

@nateawelch
Copy link
Contributor

nateawelch commented Feb 22, 2018

If those coins are going to happen anyway, at least curb their range of influence. Not because Ethereum is taking the moral high-road others will follow. If you really care about the electricity being wasted, give those coins a way to be unified, and even some of those polluting coins might show their worth thanks to easier access. Give current PoW coins a reason to join. Tolerance of different opinions is a sign of maturity. PoW coins that join under Ethereum's rules.

@OFRBG those tokens are doing PoW to secure their network. Those coins could easily be implemented as ERC20 on the Ethereum blockchain, but that means that extra electricity doesn't need to be spent to secure them. What @alexvandesande suggested with just rewarding the miner of a block with the tokens would make a ton more sense as an EIP. It could also be implemented to be run on past blocks (perhaps with a minimum mining block).

Overall I think this EIP could be more generalized to not just be around "PoW" through generation of public/private key. Perhaps just have the following:

  • claimReward(bytes) - for contracts that require data for verification
  • claimReward() - for contracts that just depend on internals/msg.sender
  • checkReward(bytes) - constant function for checking reward of a given blob (to match claimReward(bytes))
  • checkReward() - constant function for checking reward related to internals/msg.sender (to match claimReward())

These allow both the wasteful PPoW you suggest and what I essentially see as "merged mining" that @alexvandesande suggests, as well as really any other method of token distribution.

@OFRBG
Copy link
Author

OFRBG commented Feb 22, 2018

@flygoing That's something I can agree with. I started with PPoW because I don't think these altchains care about securing their network more than just playing the PoW game. Showing a middle ground "neither you nor me" could help to make them jump over. However, as you mentioned, this can be easily extended to create a non-ICO and non-airdrop distribution system. Especially with regulations starting to loom over the ICO space, new distribution systems will have to emerge. As you've noticed, some people have opted to simply make forks left and right.

I am not a miner, but the miners I know won't stop mining just because coins adopt PoS. The invested capital is already there, and they will be highly reluctant to just sell and give up their income. If you really want to curb this growth hashrate growth you need to really make tokenization more attractive. Reducing relative profitability of other coins and reducing their prevalence should in the long run curb hashrate growth. Those GPUs and ASICs won't sit idle because, as you know, every minute they aren't mining they are losing money.

PPoW could allow a smoother transition tokenization. Think of it as giving miners a transition period. Your suggestion to merge the proposals is probably worthy of being an EIP of its own. I don't know if you want to write it or you don't mind if I elaborate on it. Keep in mind that these ideas are happening as we speak: 1) current token distribution methods like ICO and airdrops are becoming unpopular due to regulations and reputation and 2) miners won't suddenly care about the environment and sell their mining rigs. Enable a smooth transition towards tokenization and the wastefulness might actually disappear over time.

If the security and viability of ERC 891 is not a problem, I would keep pushing it not because of its current impact but of its bridging capabilities. I don't mind making the generalized version you described.

@nateawelch
Copy link
Contributor

I believe the amount of new chains (ignoring forks that are forking just as a cash grab) are creating their own chains for a good purpose. Many new chains are either trying to do what Ethereum does, but better, so they can't really just be built on top of Ethereum, and thus they need their own consensus protocol, of which PoW is usually the easiest choice.

I am not a miner, but the miners I know won't stop mining just because coins adopt PoS. The invested capital is already there, and they will be highly reluctant to just sell and give up their income

I don't disagree. Coins like Bitcoin that are very reliant on ASICs likely will never leave PoW. It's just so ingrained in their ecosystem. Those miners likely wont have to worry about doing something else with their PoW. GPU mining, on the other hand, will slowly die as there are less chains that are GPU minable (either because they switch to PoS or ASICs are developed for it).

Miners get a mining reward because they're securing the network. The dilution of tokens is (most of) how the people using the network pay the miners for their service. If the mining has no purpose like this, then the reward for mining is going to be far less. Since the value of this mining is so much lower, there will be far lower demand for miners, and there just wont be enough value for all the GPUs that are abandoned from useful chain-mining.

PPoW could allow a smoother transition tokenization. Think of it as giving miners a transition period

I think as GPUs are slowly outdated by ASICs and by chains just switching from PoW, the transition will be fairly natural anyway. It's not like one day all GPU chains will cease to exist. Note that, if there is success, projects like Golem will give great alternative uses for GPUs.

Your suggestion to merge the proposals is probably worthy of being an EIP of its own. I don't know if you want to write it or you don't mind if I elaborate on it. Keep in mind that these ideas are happening as we speak: 1) current token distribution methods like ICO and airdrops are becoming unpopular due to regulations and reputation and 2) miners won't suddenly care about the environment and sell their mining rigs. Enable a smooth transition towards tokenization and the wastefulness might actually disappear over time.

Feel free to write it up, I'll come comment on it. I do agree that rewarding miners (and validators once we we get there) is potentially a good way to distribute tokens. I still think that the GPUs will find better uses than pointless mining when they're no longer useful for mining to secure a network.

@OFRBG
Copy link
Author

OFRBG commented Feb 22, 2018

I don't disagree. Coins like Bitcoin that are very reliant on ASICs likely will never leave PoW. It's just so ingrained in their ecosystem. Those miners likely wont have to worry about doing something else with their PoW. GPU mining, on the other hand, will slowly die as there are less chains that are GPU minable (either because they switch to PoS or ASICs are developed for it).

Regarding this point, I think PPoW or the ERC which you generalized would be reformatted to work to something I like to call ultra compression: compression by hashing. Setting up the fundamental pieces to avoid new chains popping up that need to do the reverse hash and secure the network, give those GPUs a home. It also worries me that those GPUs could flood the market. Just as their price rocketed, if/when miners lose profitability on GPUs, gamers will have a party, but the potential wattage spending is still there.
Honestly, if GPU does die out, the actual wattage spending might go down. Which ironically makes ASICs the good guys by killing out GPUs in exchange for the a higher network security for less spending.

I don't say that mining has no impact in ecology, but mining itself isn't a problem. If there is something to solve, it is fuel sources. Not that this concerns Ethereum, but we're taking jabs at the leaves when the root is still fossil fuels.

@ethereumdegen
Copy link

Hey @OFRBG there is a massive group of blockchainers that believe that tokens should be distributed using Proof of Work so that they are Decentralized and so that we reduce corruption in the blockchain space. Please join us at https://reddit.com/r/tokenmining

If I may add to this discussion, a similar and potentially more finished version of this spec is EIP541 for a decentralized token standard which uses PoW to make it decentralized. To all of the critics, I see your concern that energy will be wasted. I hope you are seeing the massive collateral damage that ICOs are causing to the space and I hope you feel ashamed about that. This is a way to evolve out of that. Yes energy will be expended. Yes corruption will be eliminated and we can get rid of ICOs.

@OFRBG OFRBG changed the title ERC 891: PPoW Token Extension ERC 891: Mineable Distribution Layer Sep 13, 2018
@OFRBG
Copy link
Author

OFRBG commented Sep 13, 2018

@flygoing I updated the ERC to be more focused on generic distribution over just mining.

@github-actions
Copy link

There has been no activity on this issue for two months. It will be closed in a week if no further activity occurs. If you would like to move this EIP forward, please respond to any outstanding feedback or add a comment indicating that you have addressed all required feedback and are ready for a review.

@github-actions github-actions bot added the stale label Dec 18, 2021
@github-actions
Copy link

github-actions bot commented Jan 1, 2022

This issue was closed due to inactivity. If you are still pursuing it, feel free to reopen it and respond to any feedback or request a review in a comment.

@github-actions github-actions bot closed this as completed Jan 1, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

6 participants