README.md 25.9 KB
Newer Older
1
## EOS.IO - The Most Powerful Infrastructure for Decentralized Applications
N
Nathan Hourt 已提交
2

peterwillcn's avatar
peterwillcn 已提交
3 4
[![Build Status](https://travis-ci.org/EOSIO/eos.svg?branch=master)](https://travis-ci.org/EOSIO/eos)

D
Daniel Larimer 已提交
5 6
Welcome to the EOS.IO source code repository!  EOS.IO software enables developers to create and deploy
high-performance, horizontally scalable, blockchain infrastructure upon which decentralized applications
7
can be built.
D
Daniel Larimer 已提交
8 9

This code is currently alpha-quality and under rapid development. That said,
10 11
there is plenty early experimenters can do including running a private multi-node test network and
developing applications (smart contracts).
D
Daniel Larimer 已提交
12

13 14
The public testnet described in the [wiki](https://github.com/EOSIO/eos/wiki/Testnet%3A%20Public) is running the `dawn-2.x` branch.  The `master` branch is no longer compatible with the public testnet.  Instructions are provided below for building either option.

15 16 17 18 19 20
### Supported Operating Systems
EOS.IO currently supports the following operating systems:  
1. Ubuntu 16.04 and higher (Ubuntu 16.10 recommended).  
2. MacOS Darwin 10.12 and higher (MacOS 10.13.x recommended).  
3. Fedora 25 and higher (Fedora 27 recommended).  

D
Daniel Larimer 已提交
21 22
# Resources
1. [EOS.IO Website](https://eos.io)
23 24
2. [Documentation](https://eosio.github.io/eos/)
3. [Blog](https://steemit.com/@eosio)
S
Sandwich 已提交
25
4. [Community Telegram Group](https://t.me/EOSProject)
26 27 28
5. [Developer Telegram Group](https://t.me/joinchat/EaEnSUPktgfoI-XPfMYtcQ)
6. [White Paper](https://github.com/EOSIO/Documentation/blob/master/TechnicalWhitePaper.md)
7. [Roadmap](https://github.com/EOSIO/Documentation/blob/master/Roadmap.md)
N
Nathan Hourt 已提交
29

30 31 32
# Table of contents

1. [Getting Started](#gettingstarted)
S
Serg Metelin 已提交
33
2. [Setting up a build/development environment](#setup)
34
	1. [Automated build script](#autobuild)
35 36 37 38
      1. [Clean install Linux (Ubuntu & Fedora) for a local testnet](#autoubuntulocal)
      2. [Clean install Linux (Ubuntu & Fedora) for the public testnet](#autoubuntupublic)
      3. [MacOS for a local testnet](#automaclocal)
      4. [MacOS for the public testnet](#automacpublic)
S
Serg Metelin 已提交
39
3. [Building EOS and running a node](#runanode)
40 41 42
	1. [Getting the code](#getcode)
	2. [Building from source code](#build)
	3. [Creating and launching a single-node testnet](#singlenode)
S
Sandwich 已提交
43 44
4. [Example Currency Contract Walkthrough](#smartcontracts)
	1. [Example Contracts](#smartcontractexample)
45 46 47
	2. [Setting up a wallet and importing account key](#walletimport)
	3. [Creating accounts for your smart contracts](#createaccounts)
	4. [Upload sample contract to blockchain](#uploadsmartcontract)
48
	5. [Pushing a message to a sample contract](#pushamessage)
49 50
	6. [Reading Currency Contract Balance](#readingcontract)
5. [Running local testnet](#localtestnet)
51 52 53 54
6. [Running a node on the public testnet](#publictestnet)
7. [Doxygen documentation](#doxygen)
8. [Running EOS in Docker](#docker)
9. [Manual installation of the dependencies](#manualdep)
55 56 57
   1. [Clean install Ubuntu 16.04 and higher](#ubuntu)
   2. [MacOS Sierra 10.12 and higher](#macos)
   3. [Fedora 25 and higher](#fedora)
58

S
Serg Metelin 已提交
59 60
<a name="gettingstarted"></a>
## Getting Started
61
The following instructions detail the process of getting the software, building it, running a simple test network that produces blocks, account creation and uploading a sample contract to the blockchain.
N
Nathan Hourt 已提交
62

S
Serg Metelin 已提交
63 64
<a name="setup"></a>
## Setting up a build/development environment
65

66 67 68
<a name="autobuild"></a>
### Automated build script

P
pacificcode 已提交
69
Supported Operating Systems:  
70 71 72
1. Ubuntu 16.04 and higher.  
2. MacOS Darwin 10.12 and higher.  
3. Fedora 25 and higher.  
73

74 75
For Ubuntu, MacOS and Fedora there is an automated build script that can install all dependencies and builds EOS.
We are working on supporting Centos, Amazon Linux & Red Hat in future releases.
76

77
It is called eosio_build.sh
78 79

```bash
80
cd ~/eos
81
./eosio_build.sh
82
```
83
Choose whether you will be building for a local testnet or for the public testnet and jump to the appropriate section below.  Clone the EOS repository recursively as described and run eosio_build.sh located in the root `eos` folder.
84

85 86
:warning: **As of February 2018, `master` is under heavy development and is not suitable for experimentation.** :warning:

87
We strongly recommend following the instructions for building the public testnet version for [Ubuntu](#autoubuntupublic) or [Mac OS X](#automacpublic). `master` is in pieces on the garage floor while we rebuild this hotrod. This notice will be removed when `master` is usable again. Your patience is appreciated.
88

89
<a name="autoubuntulocal"></a>
90
#### Clean install Linux (Ubuntu & Fedora) for a local testnet
91 92 93 94 95

```bash
git clone https://github.com/eosio/eos --recursive

cd eos
96
./eosio_build.sh
97 98
```

99 100
Now you can proceed to the next step - [Creating and launching a single-node testnet](#singlenode)

101
<a name="autoubuntupublic"></a>
102
#### Clean install Linux (Ubuntu & Fedora) for the public testnet
103

104 105 106 107 108
```bash
git clone https://github.com/eosio/eos --recursive

cd eos
git checkout dawn-2.x
109
./eosio_build.sh
110 111 112 113 114
```

Now you can proceed to the next step - [Running a node on the public testnet](#publictestnet)

<a name="automaclocal"></a>
115
#### MacOS for a local testnet
116

117 118
Before running the script make sure you have installed/updated XCode. Note: The build script
will install homebrew if it is not already installed on you system. [Homebrew Website](https://brew.sh)
119

120
Then clone the EOS repository recursively and run eosio_build.sh in the root `eos` folder.
121

122 123 124 125
```bash
git clone https://github.com/eosio/eos --recursive

cd eos
126
./eosio_build.sh
127 128 129 130
```

Now you can proceed to the next step - [Creating and launching a single-node testnet](#singlenode)

131
<a name="automacpublic"></a>
132
#### MacOS for the public testnet
133

134 135
Before running the script make sure you have installed/updated XCode. Note: The build script
will install homebrew if it is not already installed on you system. [Homebrew Website](https://brew.sh)
136

137
Then clone the EOS repository recursively, checkout the branch that is compatible with the public testnet, and run eosio_build.sh in the root `eos` folder.
138 139 140 141 142 143

```bash
git clone https://github.com/eosio/eos --recursive

cd eos
git checkout dawn-2.x
144
./eosio_build.sh
145 146 147 148
```

Now you can proceed to the next step - [Running a node on the public testnet](#publictestnet)

S
Serg Metelin 已提交
149
<a name="runanode"></a>
150
## Building EOS and running a node
S
Serg Metelin 已提交
151

S
Serg Metelin 已提交
152
<a name="getcode"></a>
153
### Getting the code
S
Serg Metelin 已提交
154

155
To download all of the code, download EOS source code and a recursion or two of submodules. The easiest way to get all of this is to do a recursive clone:
N
Nathan Hourt 已提交
156

157 158 159
```bash
git clone https://github.com/eosio/eos --recursive
```
N
Nathan Hourt 已提交
160 161 162

If a repo is cloned without the `--recursive` flag, the submodules can be retrieved after the fact by running this command from within the repo:

163 164 165
```bash
git submodule update --init --recursive
```
N
Nathan Hourt 已提交
166

S
Serg Metelin 已提交
167
<a name="build"></a>
168
### Building from source code
169

170 171
The *WASM_LLVM_CONFIG* environment variable is used to find our recently built WASM compiler.
This is needed to compile the example contracts inside `eos/contracts` folder and their respective tests.
172

173
```bash
S
Serg Metelin 已提交
174
cd ~
175
git clone https://github.com/eosio/eos --recursive
S
Serg Metelin 已提交
176
mkdir -p ~/eos/build && cd ~/eos/build
J
jaehong park 已提交
177
cmake -DBINARYEN_BIN=~/binaryen/bin -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib ..
178 179 180 181
make -j4
```

Out-of-source builds are also supported. To override clang's default choice in compiler, add these flags to the CMake command:
N
Nathan Hourt 已提交
182 183 184 185 186

`-DCMAKE_CXX_COMPILER=/path/to/c++ -DCMAKE_C_COMPILER=/path/to/cc`

For a debug build, add `-DCMAKE_BUILD_TYPE=Debug`. Other common build types include `Release` and `RelWithDebInfo`.

187
To run the test suite after building, run the `chain_test` executable in the `tests` folder.
N
Nathan Hourt 已提交
188

S
Serg Metelin 已提交
189 190
EOS comes with a number of programs you can find in `~/eos/build/programs`. They are listed below:

191 192
* eosiod - server-side blockchain node component
* eosioc - command line interface to interact with the blockchain
193 194
* eosiowd - EOS wallet
* eosio-launcher - application for nodes network composing and deployment; [more on eosio-launcher](https://github.com/EOSIO/eos/blob/master/testnet.md)
S
Serg Metelin 已提交
195

S
Serg Metelin 已提交
196
<a name="singlenode"></a>
197
### Creating and launching a single-node testnet
S
Serg Metelin 已提交
198

199
After successfully building the project, the `eosiod` binary should be present in the `build/programs/eosiod` directory. Run `eosiod` -- it will probably exit with an error, but if not, close it immediately with <kbd>Ctrl-C</kbd>. If it exited with an error, note that `eosiod` created a directory named `data-dir` containing the default configuration (`config.ini`) and some other internals. This default data storage path can be overridden by passing `--data-dir /path/to/data` to `eosiod`.  These instructions will continue to use the default directory.
N
Nathan Hourt 已提交
200

201
Edit the `config.ini` file, adding/updating the following settings to the defaults already in place:
N
Nathan Hourt 已提交
202 203

```
N
Nathan Hourt 已提交
204 205
# Load the testnet genesis state, which creates some initial block producers with the default key
genesis-json = /path/to/eos/source/genesis.json
S
Sandwich 已提交
206
 # Enable production on a stale chain, since a single-node test chain is pretty much always stale
N
Nathan Hourt 已提交
207 208
enable-stale-production = true
# Enable block production with the testnet producers
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229
producer-name = inita
producer-name = initb
producer-name = initc
producer-name = initd
producer-name = inite
producer-name = initf
producer-name = initg
producer-name = inith
producer-name = initi
producer-name = initj
producer-name = initk
producer-name = initl
producer-name = initm
producer-name = initn
producer-name = inito
producer-name = initp
producer-name = initq
producer-name = initr
producer-name = inits
producer-name = initt
producer-name = initu
S
Serg Metelin 已提交
230
# Load the block producer plugin, so you can produce blocks
P
Pravin 已提交
231
plugin = eosio::producer_plugin
S
Serg Metelin 已提交
232
# Wallet plugin
P
Pravin 已提交
233
plugin = eosio::wallet_api_plugin
S
Serg Metelin 已提交
234
# As well as API and HTTP plugins
P
Pravin 已提交
235 236
plugin = eosio::chain_api_plugin
plugin = eosio::http_plugin
N
Nathan Hourt 已提交
237 238
```

239
Now it should be possible to run `eosiod` and see it begin producing blocks.
peterwillcn's avatar
peterwillcn 已提交
240

241
When running `eosiod` you should get log messages similar to below. It means the blocks are successfully produced.
S
Serg Metelin 已提交
242 243 244 245 246 247

```
1575001ms thread-0   chain_controller.cpp:235      _push_block          ] initm #1 @2017-09-04T04:26:15  | 0 trx, 0 pending, exectime_ms=0
1575001ms thread-0   producer_plugin.cpp:207       block_production_loo ] initm generated block #1 @ 2017-09-04T04:26:15 with 0 trxs  0 pending
1578001ms thread-0   chain_controller.cpp:235      _push_block          ] initc #2 @2017-09-04T04:26:18  | 0 trx, 0 pending, exectime_ms=0
1578001ms thread-0   producer_plugin.cpp:207       block_production_loo ] initc generated block #2 @ 2017-09-04T04:26:18 with 0 trxs  0 pending
248
...
S
Serg Metelin 已提交
249 250
```

S
Sandwich 已提交
251
<a name="smartcontracts"></a>
S
Sandwich 已提交
252
## Example "Currency" Contract Walkthrough
S
Serg Metelin 已提交
253

254
EOS comes with example contracts that can be uploaded and run for testing purposes. Next we demonstrate how to upload and interact with the sample contract "currency".
S
Serg Metelin 已提交
255

S
Serg Metelin 已提交
256
<a name="smartcontractexample"></a>
S
Sandwich 已提交
257
### Example smart contracts
258

S
Sandwich 已提交
259
First, run the node
S
Serg Metelin 已提交
260

261
```bash
262 263
cd ~/eos/build/programs/eosiod/
./eosiod
S
Serg Metelin 已提交
264
```
265

S
Serg Metelin 已提交
266
<a name="walletimport"></a>
267
### Setting up a wallet and importing account key
S
Serg Metelin 已提交
268

269
As you've previously added `plugin = eosio::wallet_api_plugin` into `config.ini`, EOS wallet will be running as a part of `eosiod` process. Every contract requires an associated account, so first, create a wallet.
S
Serg Metelin 已提交
270

271
```bash
272 273
cd ~/eos/build/programs/eosioc/
./eosioc wallet create # Outputs a password that you need to save to be able to lock/unlock the wallet
S
Serg Metelin 已提交
274 275
```

276
For the purpose of this walkthrough, import the private key of the `inita` account, a test account included within genesis.json, so that you're able to issue API commands under authority of an existing account. The private key referenced below is found within your `config.ini` and is provided to you for testing purposes.
S
Sandwich 已提交
277

S
Sandwich 已提交
278
```bash
279
./eosioc wallet import 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
S
Sandwich 已提交
280
```
S
Serg Metelin 已提交
281

S
Serg Metelin 已提交
282
<a name="createaccounts"></a>
S
Sandwich 已提交
283
### Creating accounts for sample "currency" contract
S
Serg Metelin 已提交
284

S
Sandwich 已提交
285
First, generate some public/private key pairs that will be later assigned as `owner_key` and `active_key`.
286

287
```bash
288 289 290
cd ~/eos/build/programs/eosioc/
./eosioc create key # owner_key
./eosioc create key # active_key
291 292
```

S
Sandwich 已提交
293
This will output two pairs of public and private keys
294 295 296

```
Private key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
297
Public key: EOSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
298 299
```

S
Sandwich 已提交
300
**Important:**
301 302
Save the values for future reference.

S
Sandwich 已提交
303
Run the `create` command where `inita` is the account authorizing the creation of the `currency` account and `PUBLIC_KEY_1` and `PUBLIC_KEY_2` are the values generated by the `create key` command
304

305
```bash
306
./eosioc create account inita currency PUBLIC_KEY_1 PUBLIC_KEY_2
307 308
```

309
You should then get a JSON response back with a transaction ID confirming it was executed successfully.
310

S
Sandwich 已提交
311
Go ahead and check that the account was successfully created
312

313
```bash
314
./eosioc get account currency
315 316
```

317
If all went well, you will receive output similar to the following:
318 319 320

```json
{
321 322
  "account_name": "currency",
  "eos_balance": "0.0000 EOS",
323
  "staked_balance": "0.0001 EOS",
324 325 326
  "unstaking_balance": "0.0000 EOS",
  "last_unstaking_time": "2035-10-29T06:32:22",
...
327 328
```

S
Sandwich 已提交
329
Now import the active private key generated previously in the wallet:
330 331

```bash
332
./eosioc wallet import XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
333 334
```

S
Serg Metelin 已提交
335
<a name="uploadsmartcontract"></a>
336
### Upload sample "currency" contract to blockchain
337

S
Sandwich 已提交
338
Before uploading a contract, verify that there is no current contract:
D
Daniel Larimer 已提交
339

340
```bash
341
./eosioc get code currency
D
Daniel Larimer 已提交
342 343 344
code hash: 0000000000000000000000000000000000000000000000000000000000000000
```

S
Sandwich 已提交
345
With an account for a contract created, upload a sample contract:
346

347
```bash
348
./eosioc set contract currency ../../contracts/currency/currency.wast ../../contracts/currency/currency.abi
S
Serg Metelin 已提交
349 350
```

351
As a response you should get a JSON with a `transaction_id` field. Your contract was successfully uploaded!
S
Serg Metelin 已提交
352

353
You can also verify that the code has been set with the following command:
D
Daniel Larimer 已提交
354

355
```bash
356
./eosioc get code currency
S
Sandwich 已提交
357 358
```

359
It will return something like:
S
Sandwich 已提交
360
```bash
D
Daniel Larimer 已提交
361 362 363
code hash: 9b9db1a7940503a88535517049e64467a6e8f4e9e03af15e9968ec89dd794975
```

364 365 366 367 368 369
Before using the currency contract, you must issue the currency.

```bash
./eosioc push action currency issue '{"to":"currency","quantity":"1000.0000 CUR"}' --permission currency@active
```

S
Sandwich 已提交
370
Next verify the currency contract has the proper initial balance:
D
Daniel Larimer 已提交
371

372
```bash
373
./eosioc get table currency currency account
D
Daniel Larimer 已提交
374 375
{
  "rows": [{
376 377
     "currency": 1381319428,
     "balance": 10000000
D
Daniel Larimer 已提交
378 379 380 381 382 383
     }
  ],
  "more": false
}
```

S
Serg Metelin 已提交
384
<a name="pushamessage"></a>
385
### Transfering funds with the sample "currency" contract
386

387
Anyone can send any message to any contract at any time, but the contracts may reject messages which are not given necessary permission. Messages are not sent "from" anyone, they are sent "with permission of" one or more accounts and permission levels. The following commands show a "transfer" message being sent to the "currency" contract.
S
Serg Metelin 已提交
388

389
The content of the message is `'{"from":"currency","to":"inita","quantity":"20.0000 CUR","memo":"any string"}'`. In this case we are asking the currency contract to transfer funds from itself to someone else. This requires the permission of the currency contract.
S
Serg Metelin 已提交
390

391
```bash
392
./eosioc push action currency transfer '{"from":"currency","to":"inita","quantity":"20.0000 CUR","memo":"my first transfer"}' --permission currency@active
D
Daniel Larimer 已提交
393 394
```

395
Below is a generalization that shows the `currency` account is only referenced once, to specify which contract to deliver the `transfer` message to.
396 397

```bash
398
./eosioc push action currency transfer '{"from":"${usera}","to":"${userb}","quantity":"20.0000 CUR","memo":""}' --permission ${usera}@active
399 400
```

401
As confirmation of a successfully submitted transaction, you will receive JSON output that includes a `transaction_id` field.
D
Daniel Larimer 已提交
402

S
Serg Metelin 已提交
403
<a name="readingcontract"></a>
S
Sandwich 已提交
404
### Reading sample "currency" contract balance
405

406
So now check the state of both of the accounts involved in the previous transaction.
D
Daniel Larimer 已提交
407

408
```bash
409
./eosioc get table inita currency account
D
Daniel Larimer 已提交
410 411
{
  "rows": [{
412 413
      "currency": 1381319428,
      "balance": 200000
D
Daniel Larimer 已提交
414 415 416 417
       }
    ],
  "more": false
}
418
./eosioc get table currency currency account
D
Daniel Larimer 已提交
419 420
{
  "rows": [{
421 422
      "currency": 1381319428,
      "balance": 9800000
D
Daniel Larimer 已提交
423 424 425 426
    }
  ],
  "more": false
}
S
Serg Metelin 已提交
427 428
```

429
As expected, the receiving account **inita** now has a balance of **20** tokens, and the sending account now has **20** less tokens than its initial supply.
S
Sandwich 已提交
430

S
Serg Metelin 已提交
431
<a name="localtestnet"></a>
432
## Running multi-node local testnet
S
Serg Metelin 已提交
433

434
To run a local testnet you can use the `eosio-launcher` application provided in the `~/eos/build/programs/eosio-launcher` folder.
S
Serg Metelin 已提交
435

436
For testing purposes you will run two local production nodes talking to each other.
S
Serg Metelin 已提交
437

438
```bash
S
Serg Metelin 已提交
439 440
cd ~/eos/build
cp ../genesis.json ./
441
./programs/eosio-launcher/eosio-launcher -p2 --skip-signature
S
Serg Metelin 已提交
442 443
```

444
This command will generate two data folders for each instance of the node: `tn_data_00` and `tn_data_01`.
S
Serg Metelin 已提交
445

446
You should see the following response:
S
Serg Metelin 已提交
447

448
```bash
449 450
spawning child, programs/eosiod/eosiod --skip-transaction-signatures --data-dir tn_data_0
spawning child, programs/eosiod/eosiod --skip-transaction-signatures --data-dir tn_data_1
S
Serg Metelin 已提交
451 452
```

453
To confirm the nodes are running, run the following `eosioc` commands:
454
```bash
455 456 457
~/eos/build/programs/eosioc
./eosioc -p 8888 get info
./eosioc -p 8889 get info
S
Serg Metelin 已提交
458 459
```

460
For each command, you should get a JSON response with blockchain information.
S
Serg Metelin 已提交
461

462
You can read more on eosio-launcher and its settings [here](https://github.com/EOSIO/eos/blob/master/testnet.md)
S
Serg Metelin 已提交
463

464 465 466 467 468 469 470 471 472 473 474 475 476 477 478
<a name="publictestnet"></a>
## Running a local node connected to the public testnet

To run a local node connected to the public testnet operated by block.one, a script is provided.

```bash
cd ~/eos/build/scripts
./start_npnode.sh
```

This command will use the data folder provided for the instance called `testnet_np`.

You should see the following response:

```bash
479 480
Launched eosd.
See testnet_np/stderr.txt for eosd output.
481 482 483
Synching requires at least 8 minutes, depending on network conditions.
```

484
To confirm eosd operation and synchronization:
485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505

```bash
tail -F testnet_np/stderr.txt
```

To exit tail, use Ctrl-C.  During synchronization, you will see log messages similar to:

```bash
3439731ms            chain_plugin.cpp:272          accept_block         ] Syncing Blockchain --- Got block: #200000 time: 2017-12-09T07:56:32 producer: initu
3454532ms            chain_plugin.cpp:272          accept_block         ] Syncing Blockchain --- Got block: #210000 time: 2017-12-09T13:29:52 producer: initc
```

Synchronization is complete when you see log messages similar to:

```bash
42467ms            net_plugin.cpp:1245           start_sync           ] Catching up with chain, our last req is 351734, theirs is 351962 peer ip-10-160-11-116:9876
42792ms            chain_controller.cpp:208      _push_block          ] initt #351947 @2017-12-12T22:59:44  | 0 trx, 0 pending, exectime_ms=0
42793ms            chain_controller.cpp:208      _push_block          ] inito #351948 @2017-12-12T22:59:46  | 0 trx, 0 pending, exectime_ms=0
42793ms            chain_controller.cpp:208      _push_block          ] initd #351949 @2017-12-12T22:59:48  | 0 trx, 0 pending, exectime_ms=0
```

506 507
This eosd instance listens on 127.0.0.1:8888 for http requests, on all interfaces at port 9877
for p2p requests, and includes the wallet plugins.
508

S
Serg Metelin 已提交
509
<a name="doxygen"></a>
510
## Doxygen documentation
S
Serg Metelin 已提交
511

512 513 514
You can find more detailed API documentation in the Doxygen reference.
For the `master` branch: https://eosio.github.io/eos/
For the public testnet branch: http://htmlpreview.github.io/?https://github.com/EOSIO/eos/blob/dawn-2.x/docs/index.html
S
Serg Metelin 已提交
515

S
Serg Metelin 已提交
516
<a name="docker"></a>
517
## Running EOS in Docker
peterwillcn's avatar
peterwillcn 已提交
518

519 520 521
You can find up to date information about EOS Docker in the [Docker Readme](https://github.com/EOSIO/eos/blob/master/Docker/README.md)

<a name="manualdep"></a>
522
## Manual installation of the dependencies
523

524
If you prefer to manually build dependencies, follow the steps below.
525 526 527 528 529 530 531 532 533 534 535 536 537 538

This project is written primarily in C++14 and uses CMake as its build system. An up-to-date Clang and the latest version of CMake is recommended.

Dependencies:

* Clang 4.0.0
* CMake 3.5.1
* Boost 1.64
* OpenSSL
* LLVM 4.0
* [secp256k1-zkp (Cryptonomex branch)](https://github.com/cryptonomex/secp256k1-zkp.git)
* [binaryen](https://github.com/WebAssembly/binaryen.git)

<a name="ubuntu"></a>
539
### Clean install Ubuntu 16.10
540 541 542 543 544 545

Install the development toolkit:

```bash
sudo apt-get update
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -
M
Matias Romeo 已提交
546
sudo apt-get install clang-4.0 lldb-4.0 libclang-4.0-dev cmake make \
547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567
                     libbz2-dev libssl-dev libgmp3-dev \
                     autotools-dev build-essential \
                     libbz2-dev libicu-dev python-dev \
                     autoconf libtool git
```

Install Boost 1.64:

```bash
cd ~
wget -c 'https://sourceforge.net/projects/boost/files/boost/1.64.0/boost_1_64_0.tar.bz2/download' -O boost_1.64.0.tar.bz2
tar xjf boost_1.64.0.tar.bz2
cd boost_1_64_0/
echo "export BOOST_ROOT=$HOME/opt/boost_1_64_0" >> ~/.bash_profile
source ~/.bash_profile
./bootstrap.sh "--prefix=$BOOST_ROOT"
./b2 install
source ~/.bash_profile
```

Install [secp256k1-zkp (Cryptonomex branch)](https://github.com/cryptonomex/secp256k1-zkp.git):
568

569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611
```bash
cd ~
git clone https://github.com/cryptonomex/secp256k1-zkp.git
cd secp256k1-zkp
./autogen.sh
./configure
make
sudo make install
```

To use the WASM compiler, EOS has an external dependency on [binaryen](https://github.com/WebAssembly/binaryen.git):

```bash
cd ~
git clone https://github.com/WebAssembly/binaryen.git
cd ~/binaryen
git checkout tags/1.37.14
cmake . && make

```

Add `BINARYEN_ROOT` to your .bash_profile:

```bash
echo "export BINARYEN_ROOT=~/binaryen" >> ~/.bash_profile
source ~/.bash_profile
```

By default LLVM and clang do not include the WASM build target, so you will have to build it yourself:

```bash
mkdir  ~/wasm-compiler
cd ~/wasm-compiler
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/llvm.git
cd llvm/tools
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/clang.git
cd ..
mkdir build
cd build
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=.. -DLLVM_TARGETS_TO_BUILD= -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DCMAKE_BUILD_TYPE=Release ../
make -j4 install
```

612
Your environment is set up. Now you can <a href="#runanode">build EOS and run a node</a>.
613 614

<a name="macos"></a>
615
### MacOS Sierra 10.12.6
616 617 618

macOS additional Dependencies:

619
* Brew
620 621 622 623 624 625 626 627
* Newest XCode

Upgrade your XCode to the newest version:

```bash
xcode-select --install
```

628
Install homebrew:
629 630 631 632 633 634 635 636 637

```bash
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

Install the dependencies:

```bash
brew update
638 639
brew install git automake libtool boost openssl llvm@4 gmp ninja gettext
brew link gettext --force
640 641 642
```

Install [secp256k1-zkp (Cryptonomex branch)](https://github.com/cryptonomex/secp256k1-zkp.git):
643

644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670
```bash
cd ~
git clone https://github.com/cryptonomex/secp256k1-zkp.git
cd secp256k1-zkp
./autogen.sh
./configure
make
sudo make install
```

Install [binaryen v1.37.14](https://github.com/WebAssembly/binaryen.git):

```bash
cd ~
git clone https://github.com/WebAssembly/binaryen.git
cd ~/binaryen
git checkout tags/1.37.14
cmake . && make
```

Add `BINARYEN_ROOT` to your .bash_profile:

```bash
echo "export BINARYEN_ROOT=~/binaryen" >> ~/.bash_profile
source ~/.bash_profile
```

671 672

Build LLVM and clang for WASM:
673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693

```bash
mkdir  ~/wasm-compiler
cd ~/wasm-compiler
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/llvm.git
cd llvm/tools
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/clang.git
cd ..
mkdir build
cd build
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=.. -DLLVM_TARGETS_TO_BUILD= -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DCMAKE_BUILD_TYPE=Release ../
make -j4 install
```

Add `WASM_LLVM_CONFIG` and `LLVM_DIR` to your `.bash_profile`:

```bash
echo "export WASM_LLVM_CONFIG=~/wasm-compiler/llvm/bin/llvm-config" >> ~/.bash_profile
echo "export LLVM_DIR=/usr/local/Cellar/llvm/4.0.1/lib/cmake/llvm" >> ~/.bash_profile
source ~/.bash_profile
```
694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772

<a name="fedora"></a>
### Clean install Fedora 25 and higher

Install the development toolkit:

```bash
sudo yum update
sudo yum install git gcc.x86_64 gcc-c++.x86_64 autoconf automake libtool make cmake.x86_64 \
					bzip2 bzip2-devel.x86_64 openssl-devel.x86_64 gmp-devel.x86_64 \
					libstdc++-devel.x86_64 python3-devel.x86_64 libedit.x86_64 \
					ncurses-devel.x86_64 swig.x86_64 gettext-devel.x86_64

```

Install Boost 1.66:

```bash
cd ~
curl -L https://dl.bintray.com/boostorg/release/1.66.0/source/boost_1_66_0.tar.bz2 > boost_1.66.0.tar.bz2
tar xf boost_1.66.0.tar.bz2
echo "export BOOST_ROOT=$HOME/boost_1_64_0" >> ~/.bash_profile
source ~/.bash_profile
cd boost_1_66_0/
./bootstrap.sh "--prefix=$BOOST_ROOT"
./b2 install
```

Install [secp256k1-zkp (Cryptonomex branch)](https://github.com/cryptonomex/secp256k1-zkp.git):

```bash
cd ~
git clone https://github.com/cryptonomex/secp256k1-zkp.git
cd secp256k1-zkp
./autogen.sh
./configure
make
sudo make install
```

To use the WASM compiler, EOS has an external dependency on [binaryen](https://github.com/WebAssembly/binaryen.git):

```bash
cd ~
git clone https://github.com/WebAssembly/binaryen.git
cd ~/binaryen
git checkout tags/1.37.14
cmake . && make

```

Add `BINARYEN_ROOT` to your .bash_profile:

```bash
echo "export BINARYEN_ROOT=~/binaryen" >> ~/.bash_profile
source ~/.bash_profile
```

By default LLVM and clang do not include the WASM build target, so you will have to build it yourself:

```bash
mkdir  ~/wasm-compiler
cd ~/wasm-compiler
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/llvm.git
cd llvm/tools
git clone --depth 1 --single-branch --branch release_40 https://github.com/llvm-mirror/clang.git
cd ..
mkdir build
cd build
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=.. -DLLVM_TARGETS_TO_BUILD= -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly -DCMAKE_BUILD_TYPE=Release ../
make -j$( nproc ) install
```

Add `WASM_LLVM_CONFIG` and `LLVM_DIR` to your `.bash_profile`:

```bash
echo "export WASM_LLVM_CONFIG=~/wasm-compiler/llvm/bin/llvm-config" >> ~/.bash_profile
echo "export LLVM_DIR=/usr/local/Cellar/llvm/4.0.1/lib/cmake/llvm" >> ~/.bash_profile
source ~/.bash_profile
773 774

Your environment is set up. Now you can <a href="#runanode">build EOS and run a node</a>.