Requiring users to get ether before they can use a dApp, is too much of a barrier for any kind of mainstream adoption. If dApps offer free ether in a naive way, they can be attacked by Sybils where a user just creates many "accounts" to get the free ether. What are potential solutions and which ones are closer in actual practicality?

5 Answers 5


There are several options:

  • dApp developers/companies can pay the transaction fees themselves, but only for transactions that interact with their app, and with some sort of rate limiting the way most real-world web apps work. This is what OneName did when their product depended on the need for fees to be paid in NameCoin, for example.
  • Various techniques can be used to exchange other types of value for ether in realtime as needed. For example, if a user wants to have new features added to their Bitcoin wallet that make use of the Ethereum network, Bitcoins can be silently exchanged for ether in the background via a decentralised exchange based on BTCrelay, especially if it is payment channel enabled to make the exchange nearly instantaneous. If bitcoins can be sidechained into Ethereum, then technically fees can be paid directly in Bitcoin as well--there is nothing stopping a miner from including a transaction with a gas price of 0 but containing a claimable "BTC token" fee.
  • The needed transactions can be "farmed out" to the general public via a similar mechanism to the Ethereum Alarm Clock, provided that the transactions create value, and some of that value can be portioned off to the users who publish transactions on behalf of non-ether-holders.


In the long range, however, it probably makes sense for most people to just start an Ethereum account and put a few ether in it, then use that account across all the dApps they want to make use of.

  • The problem here is, why would anyone spend their ether just for testing purposes on a application that might not have a usability in the future? Commented Apr 24, 2018 at 15:10
  • "dApp developers/companies can pay the transaction fees themselves" How? If you are using dApp you are interacting with contracts with your own wallet. You pay gas fee for every update/transaction you make. How can you make dApp developers pay for you instead?
    – Konrad
    Commented Oct 27, 2021 at 15:54

I think unless they are just observing the dApp - they have to buy ether to actually manipulate the dapp. For example, you can view Augur for it's predictive answers without placing a bet on some future event. But to place a bet - you may need either ethers or some other token. I wonder if you would need ethers to send the other token - I think the answer is yes.


There is an Ethereum Improvement Proposal on this: ERC865: Pay transfers in tokens instead of gas, in one transaction, with a sample Solidity code


Adding to Jeff Coleman's great answer:

  • A company could give a user ether and then charge the user as part of an overall fee in a normal fiat currency. The company could have a DApp which is a mobile app which works with an Ethereum contract. The company has the user install this app, which creates an account for the user of the Ethereum contract, and transfers some ether to the account after some out of band authentication. The user can then use the app which will interact with the contract. The company includes the cost of the ether as part of their overall fee.
  • 2
    There's no need to copy and paste all of Jeff's answer (first three bullet points) to add a single fourth bullet point.
    – eth
    Commented Jul 22, 2016 at 5:10
  • Or Ethereum could open an account with the Fed and peg Eth to the dollar lol :-) Actually that's a bit like OPEC. The only reason OPEC is relevant is because they settle in USD, and the only reason USD is relevant is because nation states have to purchase OPEC energy in USD.
    – Sentinel
    Commented May 26, 2017 at 10:33

From CRYPTO-CURRENCY with Ethereum I found this solution in Autorefill section.

In order to do that, first you need to create a variable that will hold the threshold amount and a function to change it. If you don't know any value, set it to 5 finney (0.005 ether).

uint minBalanceForAccounts;

function setMinBalance(uint minimumBalanceInFinney) onlyOwner {
     minBalanceForAccounts = minimumBalanceInFinney * 1 finney;

    /* Send coins */
function transfer(address _to, uint256 _value) {
  1. Could It be a valide solution in my case (new user signin)?
  2. How can I know - before the transaction - the cost of function call (in solidity or in web3)?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.