A friend and I were thinking about transaction costs, is there any attached cost to send a transfer to a new address that has not been stored on chain before? So we started digging.

First off we called transfer to a new address and another one that has been used before, as expected the cost was 21000 for both of them.

New address: https://ropsten.etherscan.io/tx/0xec05af75ec938aa1cc78612b13d8d2e3c8f4212f60173161450297c9a25ea5a3

Miner (used before) address: https://ropsten.etherscan.io/tx/0x7fe1c8c699901923d89e07a9b66e7d952c67064bcc9d86bf84bad07cac2391b1

Then we tried to made the transfer from an SC, this is the function we are using:

function test (address receiver) public payable { receiver.transfer(msg.value); }

Simple enough, we started testing, called the function to a new address:


First surprising thing was the cost to execute this function, was 55356 gas, much higher then the 21000 we saw before, we called it again:


To our surprise, now gas costs were 30356 much less than before, why??

We tried to call the function on a used address (that should be already stored on chain) to see if sending to a new address was the differential factor, we did it twice:



And it costed 30356 in both.

Why does this happen, why sending ether to a new address from a SC costs over 50% more than sending to a used address?

  • You'd have to share the code for the smart contract. The gas cost of a transfer call shouldn't depend on whether the recipient has been the recipient of earlier transfers, but it's hard to give you an explanation without seeing the code.
    – user19510
    Jun 24 '18 at 20:29
  • (To clarify, I see the function you provided, but without the full code, it's hard to associate it with the bytecode and step through it.)
    – user19510
    Jun 24 '18 at 20:29
  • the rest of the contract shouldn't matter right? anyways MathematicalRain got it, I learnt something new today :) btw I'm a fan of your cte game, thanks for that! Jun 25 '18 at 1:40
  • In terms of gas cost, no, the rest of the contract shouldn't matter. I learned something new as well!
    – user19510
    Jun 25 '18 at 2:02

Yes this is true. If you read the Ethereum Yellow paper you can see in Appendix H that you have to pay extra gas if you send Ether to a new account.

This is to discourage addresses sending a load of transactions to new addresses, blowing up the chain size like that.

  • 1
    makes sense, but why doesn't it apply with a regular address.transfer(amount) those are always 21000 no matter if the address is new or not Jun 25 '18 at 1:37
  • 1
    FYI, I found this most accessible in Appendix G, the entry for Gnewaccount. The gas cost is 25000 for a "CALL or SUICIDE operation which creates a new account."
    – user19510
    Jun 25 '18 at 2:04
  • @smarx You are correct, 25000 is the exact difference and a new account has been created. Digging some more I found this cost was set because of a gas calculation bug exploited at around block 2100000, still don't know why this doesn't apply for regular address.transfer Jun 25 '18 at 8:38

Your Answer

