An Ethereum Development Tutorial
This repository is a short tutorial on smart contract development on the Ethereum block chain. It is not intended to teach the solidity programming language (which is the de facto standard for developing smart contracts); moreover, it is intended to show you how to create a development environment incorporating what are becoming best-of-breed components in the ethereum ecosystem. As such it's a snapshot in time: the domain is growing, changing, and developing quickly. What functions today as the best choices for a development environment may become obsolete in the future, and what I've included here is just my own opinion. Regardless, if you're interested in ethereum development, what I've outlined here is at least reasonable.
To use the tutorial you'll want to clone this repository to your computer, but you'll probably want to read the text on GitHub proper, as it should render and display all the elements of the text in a reasonable way. I've made every attempt to keep the instructions as generic as possible, but I'm currently on Linux platforms (and occasionally MacOS), so I don't have specific information about Windows platforms, and there could be minor differences in the operation of the component software.
Before you Begin
Before we begin the tutorial proper, you'll want to ensure you have some requisite software installed.
Node.js and NPM
The solidity development environment is largely ECMAScript- based, so you'll want to
have a recent version of Node.js installed, along with
a recent version of the node package manager (
npm). This is important: some of the
package dependencies will not install properly with older versions. So, if you're
using an operating system that tends to be a little "stale" (like Ubuntu LTS),
you'll probably want to install more recent versions than those that are provided
by your OS's standard repository. This tutorial was created with v8.7.0, which
at the time of writing was the most recent version available. Likewise the
used was 5.5.1, which is very current.
(If, in running the tests in the tutorial, you receive an error message about a
bignum, chances are you have an older
npm. You should delete
C extensions will need to be built, so you will need to have a valid
build environment. This includes a working C compiler, of course, but it also
includes some cryptographic libraries. Unfortunately those kinds of
dependencies are not managed by
npm, so if you run into issues you may
have to a little sleuthing. I'm currently sitting at an Ubuntu 16.04 LTS VM
which is working, and the installed cryptographic libraries include:
i libcrypto++-dev - General purpose cryptographic library - C+ i A libcrypto++9v5 - General purpose cryptographic library - sh i libgcrypt20 - LGPL Crypto library - runtime library i A libhcrypto4-heimdal - Heimdal Kerberos - crypto library i A libk5crypto3 - MIT Kerberos runtime libraries - Crypto Li i A libssh-gcrypt-4 - tiny C SSH library (gcrypt flavor)
If you run into problems, you may want to examine your libraries and add some of the above.
I have found the parity client to me the most reliable
right now. It can run natively under MacOS (installable with
Linux. It can also be run in a
docker container, if you prefer working that
Some note on installing and running parity are given in the next section.
The above is really all you need. But there are a few more dependencies that you can install that will be useful for publishing any code you develop to the block chain.
The Solidity Compiler
A command-line compiler,
solcjs, will be installed when you install the
node dependencies. However, there is also a binary/compiled version of the
solc, which you can install. The
solc compiler works with a code flattener (below), which you can
use to publish byte-verified source code to go with your smart contracts.
The Solidity Flattener
There is an open-source flattener that you can use to combine all of your source files into a single file. This file can be submitted to etherscan.io (and perhaps other places) so that people can read the source associated with the smart contracts you deploy.
Note that this is a Python module/script. You will need Python 3.5+ installed to use it.