Skip to content
This repository has been archived by the owner on Feb 7, 2018. It is now read-only.

Commit

Permalink
Merge remote-tracking branch 'origin/develop' into release
Browse files Browse the repository at this point in the history
  • Loading branch information
chriseth committed Feb 29, 2016
2 parents 998f43e + bc93486 commit 9a2a1de
Show file tree
Hide file tree
Showing 33 changed files with 1,549 additions and 9 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ include(EthPolicy)
eth_policy()

# project name and version should be set after cmake_policy CMP0048
project(cpp-ethereum VERSION "1.1.4")
project(cpp-ethereum VERSION "1.2.0")

include(EthCompilerSettings)

Expand Down
19 changes: 19 additions & 0 deletions doc/gitbook/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
TurboEthereum Guide
=======

This book is intended as a practical user guide for the "Turbo" Ethereum software distribution, originally named after the language in which it is written, C++.

TurboEthereum is a large distribution of software including a number of diverse tools. This book begins with the installation instructions, before proceeding to introductions, walk-throughs and references for the various tools that make up TurboEthereum.

The full software suite of TurboEthereum includes:

- **AlethOne** (`alethone`, "A1") The mainline Ethereum desktop miner. It connects and syncs to the Ethereum network and lets you mine, and send transactions. It will also let you do pool mining.
- **AlethZero** (`alethzero`, "AZ") The power-user Ethereum client. It connects and syncs to the Ethereum network and lets you mine, make transactions, run DApps and inspect the blockchain. It has plugins to allow arbitrary extension.
- **++eth** (`eth`) The mainline CLI Ethereum client. Run it in the background and it will connect to the Ethereum network; you can mine, make transactions and inspect the blockchain.
- **Mix** (`mix`) The integrated development environment for DApp authoring. Quickly prototype and debug decentralised applications on the Ethereum platform.
- `ethkey` A key/wallet management tool for Ethereum keys. This lets you add, remove and change your keys as well as *cold wallet device*-friendly transaction inspection and signing.
- `ethminer` A standalone miner. This can be used to check how fast you can mine and will mine for you in concert with `eth`, `geth` and `pyethereum`.
- `ethvm` The Ethereum virtual machine emulator. You can use this to run EVM code.
- `solc` The Solidity compiler. You can use this to compile Solidity programs into assembly or machine code.
- `rlp` An serialisation/deserialisation tool for the Recursive Length Prefix format.

23 changes: 23 additions & 0 deletions doc/gitbook/SUMMARY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Summary

* [Introduction](README.md)
* [Installation](chapter1.md)
* [CLI Tools](cli_tools.md)
* [Getting started](getting_started.md)
* [Interactive Console](interactive_console.md)
* [Mining](mining.md)
* [PoA Private Chains](poa.md)
* [ethkey](ethkey.md)
* [Mix](mix.md)
* [Project Editor](project_editor.md)
* [Scenarios Editor](scenarios_editor.md)
* [State Viewer](state_viewer.md)
* [Transaction Explorer](transaction_explorer.md)
* [JavaScript console](javascript_console.md)
* [Transaction debugger](transaction_debugger.md)
* [Dapps deployment](dapps_deployment.md)
* [Code Editor](code_editor.md)
* [Whisper](whisper.md)
* Recipes and How-tos
* [Cold Wallet Storage Device](cold_wallet_storage_device.md)

1 change: 1 addition & 0 deletions doc/gitbook/book.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
83 changes: 83 additions & 0 deletions doc/gitbook/chapter1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Installation

Installation is a different process dependent on which platform you run. At present, TurboEthereum supports three platforms: Ubuntu, Mac OS X and Windows.

For installing the desktop tools on Windows and Mac, just grab the [latest release](https://github.com/ethereum/webthree-umbrella/releases). (For Windows you might also need [this](http://www.microsoft.com/en-US/download/details.aspx?id=40784).)

For installing on Ubuntu or Homebrew, instructions follow.

# Installing on Ubuntu 14.04 and later (64-bit)

**Warning: The `ethereum-qt` PPA will upgrade your system-wide Qt5 installation, from 5.2 on Trusty and 5.3 on Utopic, to 5.5.**

For the latest stable version:
```
sudo add-apt-repository ppa:ethereum/ethereum-qt
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install cpp-ethereum
```

If you want to use the cutting edge developer version:
```
sudo add-apt-repository ppa:ethereum/ethereum-qt
sudo add-apt-repository ppa:ethereum/ethereum
sudo add-apt-repository ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install cpp-ethereum
```

## Installing the Mix IDE

Mix, the developer IDE is still in its infancy and still needs a lot of work. If you are adventurous, you can try to run Mix by installing the cutting edge developer version of cpp-ethereum (see above) and then add this:

```
sudo add-apt-repository ppa:ethereum/ethereum-qt
sudo add-apt-repository ppa:ethereum/ethereum
sudo add-apt-repository ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install mix
mix
```

<!--
## Installing an Ethereum node server
To run a node server on Ubuntu, run:
```
wget http://opensecrecy.com/setupeth.sh && source ./setupeth.sh BRANCH NODE_IP NODE_NAME && rm -f setupeth.sh && reboot
```
- `BRANCH` should be substituted for either `master` or `develop`, depending on whether you want a stable or bleeding-edge version.
- `NODE_IP` should be substituted for the 4-digit, dot-deliminated IP address of the node. For example `1.2.3.4` or `192.168.1.69`.
- `NODE_NAME` should be substituted for the name of the node, quoted if it contains spaces. Avoid using symbols. e.g. `"Gavs Server Node"` or `Release_Node_1`.
Wait for it to reboot and you'll be running a node.
-->

# Installing on OS X and Homebrew

If you want the full suite of CLI tools, include `eth` and `ethminer`, you'll need [Homebrew](brew.sh).

Once you've got Homebrew installed, tap the ethereum brew:
```
brew tap ethereum/ethereum
```

Then, for the stable version:
```
brew install cpp-ethereum
brew linkapps cpp-ethereum
```

or, for the latest cutting edge developer version:
```
brew reinstall cpp-ethereum --devel
brew linkapps cpp-ethereum
```

Add the `--with-gui` option to include the AlethZero and the Mix IDE in the installation; you can then find `AlethZero` and `Mix` in your Applications folder.

For options and patches, see: https://github.com/ethereum/homebrew-ethereum

2 changes: 2 additions & 0 deletions doc/gitbook/cli_tools.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# CLI Tools

13 changes: 13 additions & 0 deletions doc/gitbook/code_editor.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Code Editor

This editor provides basic functionalities of a code editor.

- In Solidity or JavaScript mode, an autocompletion plugin is available (Ctrl + Space).

- Increasing/decreasing the font size (Ctrl +, Ctrl -)

- In Solidity mode, you can display the gas estimation (Tools -> Display Gas Estimation). This will highlight all statements which requires a minimum amount of gas. Color turns to red if the gas required becomes important.
It will also display the max execution cost of a transaction (for each function).



97 changes: 97 additions & 0 deletions doc/gitbook/cold_wallet_storage_device.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
# Cold Wallet Storage Device

A Cold Wallet Storage Device (CWSD) is a device (duh) used to store keys and sign transactions which never touches the internet, or indeed any communications channels excepting those solely for basic user interaction. The use of such a device is pretty much necessary for storing any large sum of value or other blockchain-based asset, promise or instrument. For example, a device like this has been used for operating blockchain-based keys worth many millions of dollars.

For this how-to, we'll assume that the CWSD is a simple Ubuntu-based computer (a netbook works pretty well) with TurboEthereum preinstalled as per the first chapter; I will assume that you've taken the proper precautions to avoid any malware getting on to the machine (though without an internet connection, there's not too much damage malware can realistically cause).

### Kill the network

The first thing to do is to make sure you've disabled any network connection, wireless or otherwise. Maybe compile a kernel without ICP/IP and Bluetooth, maybe just destroy or remove the network hardware of the computer. It is this precaution that puts the 'C' in CWSD.

### Generate the keys

The next thing to do is to generate the key (or keys) that this machine will store. Run `ethkey` to create a wallet and then again to make as many keys as you would like to use. You can always make more later. For now I'll make one:

```
> ethkey createwallet
Please enter a MASTER passphrase to protect your key store (make it strong!): password
Please confirm the passphrase by entering it again: password
> ethkey new supersecret
Enter a passphrase with which to secure this account (or nothing to use the master passphrase): password
Please confirm the passphrase by entering it again: password
Enter a hint to help you remember this passphrase: just 'password'
Created key 055dde03-47ff-dded-8950-0fe39b1fa101
Name: supersecret
Password hint: just 'password'
ICAP: XE472EVKU3CGMJF2YQ0J9RO1Y90BC0LDFZ
Raw hex: 0092e965928626f8880629cec353d3fd7ca5974f
```

It will prompt for a password and confirmation for both commands. I'm just going to use the password "password" for both.

This "supersecret" key has an address of `XE472EVKU3CGMJF2YQ0J9RO1Y90BC0LDFZ`.

### Signing with the keys

Signing with the keys can happen in two ways: The first is to export a transaction to sign from e.g. AlethZero, perhaps saving to a USB pendrive. Let's assume that is what we have done and we have the hex-encoded transaction at `/mnt/paygav.tx`.

In order to sign this transaction we just need a single `ethkey` invocation:

```
> ethkey sign supersecret /tmp/paygav.tx
```

It will prompt you for the passphrase and finally place the signed hex in a file `/mnt/paygav.tx.signed`. Easy. If we just want to copy and paste the hex (we're too paranoid to use pen drives!) then we would just do:

```
> echo "<hex-encoded transaction here>" | ethkey sign supersecret
```

At which it will ask for your passphrase and spit out the hex of the signed transaction.

Alternatively, if we don't yet have an unsigned transaction, but we actually want to construct a transactions locally, we can do that too.

Let's assume our "supersecret" account has received some ether in the meantime and we want to pay somebody 2.1 grand of this ether (2100 ether for those not used to my English colloquialisms). That's easy, too.

```
> ethkey sign supersecret --tx-dest <destination address> --tx-gas 55000 --tx-gasprice 50000000000 --tx-value 2100000000000000000 --tx-nonce 0
```

Note the `--tx-value` (the amount to transfer) and the `--tx-gasprice` (the price we pay for a single unit of gas) must be specified in Wei, hence the large numbers there. `--tx-nonce` only needs to be specified if it's not the first transaction sent from this account.

### Importing the key

You may want to eventually import the key to your everyday device. This may be to use it directly there or simply to facilitate the creation of unsigned transactions for later signing on the CWSD. Assuming you have a strong passphrase, importing the key on to a hot device itself should not compromise the secret's safety too much (though obviously it's materially less secure than being on a physically isolated machine).

To do this, simply copy the JSON file(s) in your `~/.web3/keys` path to somewhere accessible on your other (non-CWSD) computer. Let's assume this other computer now has our "supersecret" key at `/mnt/supersecret.json`. There are two ways of importing it into your Ethereum wallet. The first is simplest:

```
> ethkey import /mnt/supersecret.json supersecret
Enter the passphrase for the key: password
Enter a hint to help you remember the key's passphrase: just 'password'
Imported key 055dde03-47ff-dded-8950-0fe39b1fa101
Name: supersecret
Password hint: just 'password'
ICAP: XE472EVKU3CGMJF2YQ0J9RO1Y90BC0LDFZ
Raw hex: 0092e965928626f8880629cec353d3fd7ca5974f
```

A key can only be added to the wallet whose address is known; to figure out the address, `ethkey` will you to type your passphrase.

This is less than ideal since if the machine is actually compromised (perhaps with a keylogger), then an attacker could slurp up your passphrase and key JSON and be able to fraudulently use that account as they pleased. Ouch.

A more secure way, especially if you're not planning on using the key directly from this hot machine in the near future, is to provide the address manually on import. It won't ask you for the passphrase and thus potentially compromise the secret's integrity (assuming the machine is actually compromised in the first place!).

To do this, I would remember the "supersecret" account was `XE472EVKU3CGMJF2YQ0J9RO1Y90BC0LDFZ` and tell `ethkey` as such while importing:

```
> ethkey importwithaddress XE472EVKU3CGMJF2YQ0J9RO1Y90BC0LDFZ supersecret
Enter a hint to help you remember the key's passphrase: just 'password'
Imported key 055dde03-47ff-dded-8950-0fe39b1fa101
Name: supersecret
Password hint: just 'password'
ICAP: XE472EVKU3CGMJF2YQ0J9RO1Y90BC0LDFZ
Raw hex: 0092e965928626f8880629cec353d3fd7ca5974f
```

In both cases, we'll be able to see the key in e.g. AlethZero as one of our own, though we will not be able to sign with it without entering the passphrase. Assuming you never enter the passphrase on the hot machine (but rather do all signing on the CWSD) then you should be reasonably safe. Just be warned that the security of the secret is lieing on the network security of your hot machine *and* the strength of your key's passphrase. I really wouldn't count on the former.
75 changes: 75 additions & 0 deletions doc/gitbook/dapps_deployment.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# Dapps deployment


This feature allows users to deploy the current project as a Dapp in the main blockchain.
This will deploy contracts and register frontend resources.

The deployment process includes three steps:

- **Deploy contract**:
This step will deploy contracts in the main blockchain.

- **Package dapp**:
This step is used to package and upload frontend resources.

- **Register**:
To render the Dapp, the Ethereum browser (Mist or AlethZero) needs to access this package. This step will register the URL where the resources are stored.

To Deploy your Dapp, Please follow these instructions:

Click on `Deploy`, `Deploy to Network`.
This modal dialog displays three parts (see above):

- **Deploy contract**

- *Select Scenario*

"Ethereum node URL" is the location where a node is running, there must be a node running in order to initiate deployment.

"Pick Scenario to deploy" is a mandatory step. Mix will execute transactions that are in the selected scenario (all transactions except transactions that are not related to contract creation or contract call). Mix will display all the transactions in the panel below with all associated input parameters.

"Gas Used": depending on the selected scenario, Mix will display the total gas used.

- *Deploy Scenario*

"Deployment account" allow selecting the account that Mix will use to execute transactions.

"Gas Price" shows the default gas price of the network. You can also specify a different value.

"Deployment cost": depending on the value of the gas price that you want to use and the selected scenario. this will display the amount ether that the deployment need.

"Deployed Contract": before any deployment this part is empty. This will be filled once the deployment is finished by all contract addresses that have been created.

"Verifications". This will shows the number of verifications (number of blocks generated on top of the last block which contains the last deployed transactions). Mix keep track of all the transactions. If one is missing (unvalidated) it will be displayed in this panel.

- **Package dapp**

- *Generate local package*

The action "Generate Package" will create the package.dapp in the specified folder

"Local package Url" the content of this field can be pasted directly in AlethZero in order to use the dapp before uploading it.

- *Upload and share package*

This step has to be done outside of Mix. package.dapp file has to be hosted by a server in order to be available by all users.

"Copy Base64" will copy the base64 value of the package to the clipboard.

"Host in pastebin.com" will open pastebin.com in a browser (you can then host your package as base64).

- **Package dapp**

"Root Registrar address" is the account address of the root registrar contract

"Http URL" is the url where resources are hosted (pastebin.com or similar)

"Ethereum URL" is the url that users will use in AlethZero or Mist to access your dapp.

"Formatted Ethereum URL" is the url that users will use in AlethZero or Mist to access your dapp.

"Gas Price" shows the default gas price of the network. You can also specify a different value.

"Registration Cost" will display the amount of ether you need to register your dapp url.


Loading

0 comments on commit 9a2a1de

Please sign in to comment.