Earlier today the Ethereum main network successfully hard-forked into a new phase of development. This was the Homestead Release which @obscuren announced a few weeks ago.
We’re taking the opportunity to have a tidy up here at doublethinkco too.
We we have a new logo and new Github repository name – cpp-ethereum-cross.
The renaming matches the forthcoming repo consolidation for the main cpp-ethereum project which we have been talking about for quite some time. That reorganization will see the code for eth return to the cpp-ethereum repo which was its home from its inception until October 2015.
You can read all about the reboot and repo shuffles at the brand new Ethereum C++ Homepage which I’ve been working on for the last week or so.
Get your cross-build Homestead binaries here -> crosseth-v1.2.2
Are you looking forward for the Homestead transition on Pi Day?
So are we, and if you have any ARM devices (SBCs, Linux mobile, etc) and would like something to play around with this week, here’s a fresh round of Homestead-friendly cross-built eth-v1.2.2 binaries for you to try out.
If you don’t know any much about ARM ABIs then you are not alone.
There is a big table in the README for the cpp-ethereum-cross repo which has details on which of these releases you will need for a very broad range of ARM devices. If you’re still having issues getting it going, please tweet to @doublethink_co, or raise a GitHub issue and we’ll try to get you unstuck.
Just unzip the content onto your device and do something like the following (dependent on your actual unzip directory):
We aim to produce matching cross-builds for every official cpp-ethereum release moving forward.
I am delighted to report that we have emerged victorious in our application for BlockGrantX #2 from Wanxiang Blockchain Labs with our “Ethereum for Resource Constrained Devices”.
This means that our ongoing work on C++ cross-builds and subsequent and long-planned C++ Light Client work will be funded. Hurrah🙂
Thank you, Wanxiang Blockchain Labs, for your generous contribution to the eco-system!
An extract from the funding application
“Bringing Ethereum to the resource-constrained devices which are likely to dominate Edge Computing in the coming era of IoT”
We have seen prototypes in this area from Project ADEPT and Slock.it, but they have all been running full nodes on devices which are near-desktop capability in terms of CPU, storage and network specifications. I want to build the real thing – starting with the Gear S2 smartwatch as a flagship device.
The approach is to cross-compile the C++ client, minimize its dependencies and footprint, and then to add support for the LES light client protocol.
The project has been ongoing since July 2015 … We hit our first major milestone in late November – with working cross-builds for a large variety of devices.
Want to know anything about ARM ABIs? Neither did I, but in the process of trying to get these cross-compiled Eth binaries working across a wide-range of mobile, wearable and SBC devices I have learnt more than I ever wanted to know. I did it for you. And for the children.
And it isn’t over! No sir, it is not. I still haven’t actually got it working on my flagship target device, the Samsung Gear S2 smartwatch. Because the S2 ships with GCC 4.6 runtime libraries. From GCC 4.6.1. Which was released in June 2011. Of course it does. So I will have to go down another rabbit-hole there, of building GCC against a non-default sysroot.
So, what are these “two ABIs”? They are the armel and armhf calling conventions, which can respectively be boiled down to “software floating-point” and “hardware floating-point”. Those form the two “kingdoms” of ARM, with armel dying, but not dead, with older hardware, Android 32-bit and Tizen still clinging onto the carcass. Oh, and there is ARMv6 for the first generation of Raspberry Pi, where everything else in the universe is ARMv7.
You don’t want to hear anymore about this nonsense, and I don’t want to write anymore, but here is a handy table which contains my very hard-won knowledge of “what is what” for our main target platforms, and for the existing binaries which we are generating. Click on the image for a readable version!
There are new binaries available for all four build variants at our Github repo.
Happy New Year! Here is the Happy Hat to cheer us into 2016.
So my contract with doublethink.co is ending, at least in its current form. Our most consequent codebase that cross-compiles the c++ implementation of Ethereum on various platforms is now in a reasonably maintainable/extensible state. Bob will now be driving all remaining tweaks to get all sorts of great architectures going! I will likely step in here and there if there are more substantial chunks of code to be written, as well as help with any issues/shortcomings of the existing code.
Bob is also actively working with the “upstream” dev team now, and trying to adapt/fix their codebase so that we don’t need all these hacks. He’s so far managed to get some good PRs merged (for instance this one and that one), so it’s quite encouraging for the future. Ideally our own codebase would shrink over time as its content becomes configuration knobs in the canonical implementation.
Anyway, I look forward to seeing all the cool devices that will soon be able to run Ethereum🙂 My fridge just can’t wait to order its own milk anymore…
I’ve spent a fair amount of time this week getting the Github documentation for webthree-umbrella-cross into a state which might actually be useful for other people. Please do check it out🙂
There are even some pre-releases available for download:
There is a very large test matrix of platforms we still need to get working and various other TODOs, but we’re certainly getting close to a complete end-to-end solution.
This week has also seen my first Ethereum commits, with the automated dependency graph being the largest so far. Getting that graph generation correct was a large chunk of my work week, but I am very happy with the result.
I am off for a week’s vacation tomorrow and will be completely unplugged from the Internet. Anthony is ramping down on the project now, but still has some work on his plate for the coming week.
When I return from vacation, I’ll keep working through the Open Issues, which include cloning the ETHDEV C++ team’s Jenkins instance, and adding automation to the same level for cross-builds, and bringing up my home mobile/wearable test farm.