Ethereum Blog

Ethereum Protocol Update 1

Introduction

user

Stephan Tual

CCO at Ethereum. Passionate about the potential for social change engendered by blockchain technology.


LATEST POSTS

A message from Stephan Tual 03rd September, 2015

The Thawing Frontier 04th August, 2015

announcement

Ethereum Protocol Update 1

Posted on .

Here comes the first Frontier patch, and this is a big one!

Before you go further, if your keys date back from Go 1.0 rc or C++ 0.9.36, note that you should regenerate all of your keys NOW. Though some releases of the pre-alpha and alpha clients are secure, this depends on which codebase and which version. You should assume that all keys generated prior to these clients are insecure and compromised. This, note, does not affect the pre-sale wallets.

687474703a2f2f692e696d6775722e636f6d2f344f686877776f2e6a7067

Thawing

The thawing pull request has been merged for the Go client and the Master branch has been updated. If you’re still running branch release 1.0.0 please switch to Master.

As for the C++ users, they can also switch to master once merged, and binaries will be made available shortly. If you’d rather not update eth but still wish to help thaw the network, you can also just restart eth with an extra parameter of –gas-floor 3141592.

I thought that I’d also repost a quick explanation on how the gas limit targeting process operates, and why we cannot guarantee a time by which we’ll reach the 21K limit necessary to process one basic transaction per block.

Each miner runs a copy of geth or eth. In the Frontier Genesis release, both were set to target 5k and never deviate from that figure. Now, with this update, both clients will be updated to instead target 3M gas limit per block.

But they cannot switch to a 3M gas limit just like that, because the protocol forces them to climb slowly at a certain rate. That rate is equal to previous block limit / 1024. Now, assuming all miners update their clients, and none of them mess around with the settings, we’re going to reach 3M within 28h assuming a steady 15s block time including propagation. But here’s the thing – not all miners are going to update in time, some might forget and some might never update!

So, going forward, if a winning block is mined by a updated miner, the block limit will adjust upwards by the rate intended, but if it is mined by a ‘lazy’ miner who didn’t update, it will adjust back downwards (as the lazy miner is still targeting 5k).

For this reason, it will take a minimum of 6h to get to a 21K gas limit per block(1 trx per block), and a minimum of 28h to get to 3M. In practice, it will likely take considerably longer than that.

This is where the free market come into play. Technically, miners could even have colluded a few days ago to modify the client code and make the network behave rather differently than what we had in mind. We merely act as advisers to the community.

Default, community chosen, Genesis block

The Genesis block we have seen adopted by the community has now been hardcoded in the clients, and you no longer need to specify the –genesis parameter to start eth or geth. That said, you can still specify a hand-crafted genesis block if you want to start a private chain with different genesis, for example.

Bug fixes

On the Go client side, a series of bug fixes and improvement have been merged into 1.0.1, including readying ourselves for a Go 1.5 release.

  • Fixed crash in chain manager #1568
  • Log number fixes #1545
  • Crypto fix for go 1.5 #1536
  • Fix for eth_call and eth_estimateGas #1534
  • Console resend method fix #1461

On the C++ client, a full external audit has been carried out on its Key Store and cryptography. All actions recommended by our expert reviewers have been acted upon. Numerous optimizations and security improvements were added to the client:

  • A unique C++ client feature is Secure Secrets: all heap memory used to store your secrets is securely overwritten immediately after it is finished
  • The C++ client now relies upon boost::random_device, giving a cryptographically secure random-number generation
  • Several crash and build fixes for AlethZero
  • Enhancements to Alethzero, especially regarding account information
  • The CLI tool ‘ethkey’ can now be used in concert with AlethZero to inspect and sign an otherwise unsigned transaction. This allows you to have a completely air-gapped cold-wallet-device

Difficulty adjustment scheme

A lot of you have been wondering how we would implement a switch from PoW to PoS in time for Serenity. This will be handled by the newly introduced difficulty adjustment scheme, which elegantly guarantees a hard-fork point in the next 16 months.

It works as follow: starting from block 200,000 (very roughly 17 days from now), the difficulty will undergo an exponential increase which will only become noticeable in about a year. At that point (just around the release of the Serenity milestone), we’ll see a significant increase in difficulty which will start pushing the block resolution time upwards.

So, a year on, the network will continue to be useful for roughly 3-4 months, but eventually will reach an ‘Ice Age’ of sorts: the difficulty will simply be too high for anyone to find a block. This will allow us to introduce PoS, perhaps via Casper, if it proves itself.

profile

Stephan Tual

CCO at Ethereum. Passionate about the potential for social change engendered by blockchain technology.

Comments
user

Author Donald McIntyre

Posted at 7:20 pm August 5, 2015.

Do I have to wait for the update for Windows on Chocolatey? I have geth-stable 1.0.0.0

Reply
user

Author Hippasus

Posted at 7:21 pm August 5, 2015.

Good stuff!

Reply
user

Author Guest

Posted at 7:26 pm August 5, 2015.

Have the automated builds been updated too? I.e. the ones here: https://github.com/ethereum/go-ethereum and here: https://build.ethdev.com/builds/Windows%20C%2B%2B%20develop%20branch/ ?

Reply
user

Author alexeyeremenko

Posted at 7:27 pm August 5, 2015.

Thanks for update. Geth 1.0.1 is not officially released yet. Should I download it anyway or wait for release ?

How about the promised hypercube / file storage layer ? Is it on a roadmap ?

Reply
user

Author Greg Slepak

Posted at 7:46 pm August 5, 2015.

Where are the instructions for re-generating keys?

What to do about keys associated with mined blocks?

Reply
    user

    Author Joshua Davis

    Posted at 10:13 pm August 5, 2015.

    My question exactly… again Stephan please communicate with the community clearly and in a way that doesn’t generate unnecessary anxiety and if you could do it NOW ™ that would be great.

    Reply
      user

      Author sanded

      Posted at 10:45 pm August 5, 2015.

      I completely seccond that! What’s the point of even writing what we should do when there’s so much critical information missing. Personally I don’t know which version I used to generate the keys. Also, it’s not even feasible to quickly find out which version you mean by “Go 1.0 RC”. Why not use a tag from https://github.com/ethereum/go-ethereum/releases so everybody positively knows what you’re talking about.

      Next, if I would know whether or not I should “regenerate” my keys, it’d be nice if you would have spared a few minutes to let us know how to do that.

      This blogpost I found very frustrating because of that. A few minutes of your time in such a situation can save many minutes and worries from many people.

      Reply
    user

    Author Stephan Tual

    Posted at 2:28 am August 6, 2015.

    For eth, it’s mv $HOME/.ethereum/keys.info $HOME/.ethereum/kets.info.old

    For geth, at console, just do personal.newAccount(“type_passphrase_here”) and use this account going forward.

    Reply
user

Author keo604

Posted at 8:14 pm August 5, 2015.

There’s something I don’t understand.. Isn’t difficulty self-adjusting itself based on average block time?

Reply
    user

    Author Stephan Tual

    Posted at 10:09 pm August 5, 2015.

    That’s still correct, it’s just that the difficulty adjustment function now include this new parameter which will only have an impact starting in 12 months time.

    Reply
user

Author Joshua Davis

Posted at 10:11 pm August 5, 2015.

Stephan I don’t find your choice of words very helpful. In addition you provide 0 explanation or support to the community to take your advice. Think about what you wrote carefully:
“Before you go further, if your keys date back from Go 1.0 rc or C++ 0.9.36, note that you should regenerate all of your keys NOW”
With NOW in all CAPS. So again what is it that you want us to do? Where are your step by step instructions? Your assumption is that we understand what you are asking of us which is unfair.

Reply
    user

    Author Anthony Cros

    Posted at 11:12 pm August 5, 2015.

    I agree.

    Also, to what extent could they be potentially compromised? What would be a worst case scenario? Can we safely transfer any frontier-mined ethers to a 1.0.1 account once transactions thawing finishes?

    Reply
      user

      Author Flemming Dal Jørgensen

      Posted at 11:54 pm August 5, 2015.

      My question as well, will our mined blocks be potentially stolen if not regenerated?
      And how to regenerate?
      Do we risk looting of our old keys if Ether is not transferred to a new wallet/key even if the wallet is offline?

      Reply
        user

        Author Stephan Tual

        Posted at 2:28 am August 6, 2015.

        Hi Flemming, see my answer to Anthony above, with instructions to generate the keys if this applies to you.

        Reply
      user

      Author Stephan Tual

      Posted at 2:27 am August 6, 2015.

      Hi Anthony, what matters is the version of the software you have installed at the time you generated the keys. If you have created keys PRIOR to Go 1.0 rc or C++ 0.9.36, then somehow continued using them into Frontier, OR are expecting an Olympic reward, then you should regenerate them. If neither of these two factors apply to you, then there’s nothing to do.

      If this applies to you, then regenerate keys in either client.

      For eth, it’s mv $HOME/.ethereum/keys.info $HOME/.ethereum/kets.info.old

      For geth, at console, just do personal.newAccount(“type_passphrase_here”) and use this account going forward.

      Reply
        user

        Author GK

        Posted at 5:57 am August 6, 2015.

        Stephan,

        It’s not clear to me the conditions under which keys should be regenerated. In the original post at the top of this page you mentioned:

        Regenerate keys “if your keys date back FROM Go 1.0 rc or C++ 0.9.36″

        Then in the post right above my post here:

        Regenerate kys “If you have created keys PRIOR to Go 1.0 rc or C++ 0.9.36″

        The words PRIOR and FROM mean different things. Can you please clarify?

        Thanks!

        Reply
          user

          Author Stephan Tual

          Posted at 12:42 pm August 6, 2015.

          Prior. <= Go 1.0 rc or C++ 0.9.36 if you prefer 🙂

          user

          Author Anthony Cros

          Posted at 2:53 pm August 6, 2015.

          Thanks, I thought that was strange 1.0.0 keys were already deprecated!

          user

          Author GK

          Posted at 7:42 am August 7, 2015.

          Thanks for the clarification Stephan.

        user

        Author Daniel Schwarz

        Posted at 11:32 am August 7, 2015.

        I made a new account on geth using personal.newAccount(“type_passphrase_here”)
        and I changed my eth coinbase to the new using the command
        miner.setEtherbase(“mynewaddress”) and when I check with web3.eth.coinbase I confirm the change…. The problem is when I stop geth with ctrl+c and I begin mining after a while the coinbase address is set again to the last address I had before the last created !!! So using the miner.setEtherbase don’t make a permanent change to the coinbase address…. Can anybody help me out? How can I change permanently the coinbase address?

        Reply
user

Author MaxcoinOhio

Posted at 10:16 pm August 5, 2015.

lol…what a genius scheme of ensuring everyone behaves and jumps onto the PoS chain 🙂 You guys are very creative and badass!

Reply
user

Author Frank Kaufmann

Posted at 10:26 pm August 5, 2015.

Someone set us up the Cryobomb.

Reply
user

Author Def Aced

Posted at 10:59 pm August 5, 2015.

“We merely act as advisers to the community.”

This is dishonest statement at best.. bring this up on irc get banned because Stephen says “i simply remove trolls”. Yea.. stating the fuckin truth is trolling. I guess if I were front running a scam id kick naysayers too.

Reply
user

Author sanded

Posted at 11:02 pm August 5, 2015.

ΞTHÐΞV – Jeffrey Wilcke on Reddit: “If you generated your keys with geth you’re fine after 0.9.34. This is months ago”

Reply
    user

    Author Anthony Cros

    Posted at 11:15 pm August 5, 2015.

    That was probably to his best knowledge at the time.

    Reply
user

Author Federico Viridiana

Posted at 11:20 pm August 5, 2015.

So what shall we do exactly?

$ cd go-ethereum
$ git checkout master
$ git pull
$ make geth
$ build/bin/geth account new

Is that all? Does that imply we have to move any Ether balance from the old insecure account to the new one? But then the GAS limit comes into play, so that can’t be done NOW, right?

Reply
    user

    Author Stephan Tual

    Posted at 2:31 am August 6, 2015.

    Assuming this applies to you, then yes, what you describe would create a new account. Then transfer from A to B, assuming you have a balance (which could only have been obtained by mining). You’ll only be able to do this when thawing allows for a trx per block, yes.

    Reply
      user

      Author Federico Viridiana

      Posted at 11:16 am August 6, 2015.

      Actually, I’m not sure whether this applies to me, as I don’t know how old version Go 1.0 rc was. I can only say I first downloaded and built both Go and Cpp source code on July 25th.
      Am I safe or not?

      Reply
        user

        Author Stephan Tual

        Posted at 12:44 pm August 6, 2015.

        I’m assuming you’re a miner (the only way you could have actual Ether as part of your balance). It of course depends which branch you downloaded at the time, which you don’t remember. Even though the odds are that you’re fine, it takes seconds to create a new account: just do geth account new then set your coinbase to the new address, then transfer from the old to the new when thawing ends.

        Reply
user

Author Werner

Posted at 11:54 pm August 5, 2015.

You probably meant C++ develop branch. The master branch is for the foolishly brave 😉

Reply
user

Author GhostInTheBlockchain

Posted at 4:27 am August 6, 2015.

Just a small note. The Windows version of eth requires two dashes before the gas-floor option. No idea what the Linux version requires.

Reply
user

Author Ian Dooda

Posted at 12:23 am August 7, 2015.

So, for a non-miner who has Geth 1.0.0 and wants to update in order to be able to send and receive Ether, what do I need to do?

Reply
    user

    Author embi

    Posted at 3:43 am August 7, 2015.

    iirc you will be able to send or receive ethers even if you don’t update, said that, updating is recommended becuase it comes with some fixes it also helps the thawing transition faster if more and more people updates, because it comes with full gas limit target hardcoded.

    So, asumming you are using Windows and decide to update, look at my previous comment for the official download link, then execute it and you will be updated (the data is stored in the %appdata%/ethereum/ folder so it is not affected by the geth executable update.

    I hope you understand my explanation, english is not my mother language 😉

    Reply
      user

      Author Ian Dooda

      Posted at 5:37 am August 7, 2015.

      Thanks so much, but actually I am on Mac. Are there instructions somewhere for Mac update?

      Reply
        user

        Author embi

        Posted at 4:01 pm August 7, 2015.

        Haha, ok the instructions for OSX are also pretty simple!
        Just open a terminal and run this command:

        brew update && brew reinstall geth

        The first part of the command fetches de last version information and the second part downloads and installs it in your system, replacing the old version.

        Cheers !

        Reply
          user

          Author Ian Dooda

          Posted at 4:48 pm August 7, 2015.

          Aha! Thanks

          user

          Author Ian Dooda

          Posted at 4:53 pm August 7, 2015.

          Should that be
          brew reinstall ethereum
          ?

          user

          Author Ian Dooda

          Posted at 5:25 pm August 7, 2015.

          Error: No available formula for ethereum-ethereum/ethereum/ethereum

Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

View Comments (45) ...
Navigation