README.md 29.8 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
### Supported Operating Systems
EOS.IO currently supports the following operating systems:  
17 18 19 20
1. Amazon 2017.09 and higher.  
2. Fedora 25 and higher (Fedora 27 recommended).  
3. Ubuntu 16.04 and higher (Ubuntu 16.10 recommended).  
4. MacOS Darwin 10.12 and higher (MacOS 10.13.x recommended).  
21

D
Daniel Larimer 已提交
22 23
# Resources
1. [EOS.IO Website](https://eos.io)
24 25
2. [Documentation](https://eosio.github.io/eos/)
3. [Blog](https://steemit.com/@eosio)
S
Sandwich 已提交
26
4. [Community Telegram Group](https://t.me/EOSProject)
27 28 29
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)
J
Jonathan Giszczak 已提交
30
8. [Wiki](https://github.com/EOSIO/eos/wiki)
N
Nathan Hourt 已提交
31

32 33 34
# Table of contents

1. [Getting Started](#gettingstarted)
S
Serg Metelin 已提交
35
2. [Setting up a build/development environment](#setup)
36
	1. [Automated build script](#autobuild)
37 38
      1. [Clean install Linux (Amazon, Fedora & Ubuntu) for a local testnet](#autoubuntulocal)
      2. [Clean install Linux (Amazon, Fedora & Ubuntu) for the public testnet](#autoubuntupublic)
39 40
      3. [MacOS for a local testnet](#automaclocal)
      4. [MacOS for the public testnet](#automacpublic)
S
Serg Metelin 已提交
41
3. [Building EOS and running a node](#runanode)
42 43 44
	1. [Getting the code](#getcode)
	2. [Building from source code](#build)
	3. [Creating and launching a single-node testnet](#singlenode)
J
Jonathan Giszczak 已提交
45
  4. [Next steps](#nextsteps)
S
Sandwich 已提交
46 47
4. [Example Currency Contract Walkthrough](#smartcontracts)
	1. [Example Contracts](#smartcontractexample)
48 49 50
	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)
51
	5. [Pushing a message to a sample contract](#pushamessage)
52 53
	6. [Reading Currency Contract Balance](#readingcontract)
5. [Running local testnet](#localtestnet)
54 55 56 57
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)
58 59 60 61
   1. [Clean install Amazon 2017.09 and higher](#cleaninstallamazon)
   2. [Clean install Fedora 25 and higher](#fedora)
   3. [Clean install Ubuntu 16.04 and higher](#ubuntu)
   4. [Clean install MacOS Sierra 10.12 and higher](#macos)
62

S
Serg Metelin 已提交
63 64
<a name="gettingstarted"></a>
## Getting Started
65
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 已提交
66

S
Serg Metelin 已提交
67 68
<a name="setup"></a>
## Setting up a build/development environment
69

70 71 72
<a name="autobuild"></a>
### Automated build script

P
pacificcode 已提交
73
Supported Operating Systems:  
74 75 76 77
1. Amazon 2017.09 and higher.  
2. Fedora 25 and higher (Fedora 27 recommended).  
3. Ubuntu 16.04 and higher (Ubuntu 16.10 recommended).  
4. MacOS Darwin 10.12 and higher (MacOS 10.13.x recommended).  
78

79 80
For Amazon, Fedora, Ubuntu & MacOS there is an automated build script that can install all dependencies and builds EOS.
We are working on supporting other Linux/Unix distributions in future releases.
81

82
It is called eosio_build.sh
83 84

```bash
85
cd eos
86
./eosio_build.sh
87
```
88
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.
89

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

92
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.
93

94
<a name="autoubuntulocal"></a>
95
#### :no_entry: Clean install Linux (Anmazon, Fedora & Ubuntu) for a local testnet :no_entry:
96 97 98 99 100

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

cd eos
101
./eosio_build.sh
102 103
```

J
Jonathan Giszczak 已提交
104 105 106 107 108 109
For ease of contract development, one further step is required:

```bash
sudo make install
```

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

112
<a name="autoubuntupublic"></a>
113
#### Clean install Linux (Anmazon, Fedora & Ubuntu) for the public testnet
114

115 116 117 118
```bash
git clone https://github.com/eosio/eos --recursive

cd eos
119

120
git checkout DAWN-2018-01-25
121
./eosio_build.sh
122 123
```

J
Jonathan Giszczak 已提交
124 125 126 127 128 129
For ease of contract development, one further step is required:

```bash
sudo make install
```

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

<a name="automaclocal"></a>
133
#### :no_entry: MacOS for a local testnet :no_entry:
134

135 136
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)
137

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

140 141 142 143
```bash
git clone https://github.com/eosio/eos --recursive

cd eos
144
./eosio_build.sh
145 146
```

J
Jonathan Giszczak 已提交
147 148 149 150 151 152
For ease of contract development, one further step is required:

```bash
make install
```

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

155
<a name="automacpublic"></a>
156
#### MacOS for the public testnet
157

158 159
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)
160

161
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.
162 163 164 165 166

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

cd eos
167

168
git checkout DAWN-2018-01-25
169
./eosio_build.sh
170 171
```

J
Jonathan Giszczak 已提交
172 173 174 175 176 177
For ease of contract development, one further step is required:

```bash
make install
```

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

S
Serg Metelin 已提交
180
<a name="runanode"></a>
181
## Building EOS and running a node
S
Serg Metelin 已提交
182

S
Serg Metelin 已提交
183
<a name="getcode"></a>
184
### Getting the code
S
Serg Metelin 已提交
185

186
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 已提交
187

188 189 190
```bash
git clone https://github.com/eosio/eos --recursive
```
N
Nathan Hourt 已提交
191 192 193

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:

194 195 196
```bash
git submodule update --init --recursive
```
N
Nathan Hourt 已提交
197

S
Serg Metelin 已提交
198
<a name="build"></a>
199
### Building from source code
200

201 202
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.
203

204
```bash
S
Serg Metelin 已提交
205
cd ~
206
git clone https://github.com/eosio/eos --recursive
S
Serg Metelin 已提交
207
mkdir -p ~/eos/build && cd ~/eos/build
J
jaehong park 已提交
208
cmake -DBINARYEN_BIN=~/binaryen/bin -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib ..
209
make -j$( nproc )
210 211 212
```

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 已提交
213 214 215 216 217

`-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`.

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

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

222 223
* eosiod - server-side blockchain node component
* eosioc - command line interface to interact with the blockchain
224 225
* 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 已提交
226

S
Serg Metelin 已提交
227
<a name="singlenode"></a>
228
### Creating and launching a single-node testnet
S
Serg Metelin 已提交
229

230
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 已提交
231

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

```
N
Nathan Hourt 已提交
235 236
# 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 已提交
237
 # Enable production on a stale chain, since a single-node test chain is pretty much always stale
N
Nathan Hourt 已提交
238 239
enable-stale-production = true
# Enable block production with the testnet producers
240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260
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 已提交
261
# Load the block producer plugin, so you can produce blocks
P
Pravin 已提交
262
plugin = eosio::producer_plugin
S
Serg Metelin 已提交
263
# Wallet plugin
P
Pravin 已提交
264
plugin = eosio::wallet_api_plugin
S
Serg Metelin 已提交
265
# As well as API and HTTP plugins
P
Pravin 已提交
266 267
plugin = eosio::chain_api_plugin
plugin = eosio::http_plugin
N
Nathan Hourt 已提交
268 269
```

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

272
When running `eosiod` you should get log messages similar to below. It means the blocks are successfully produced.
S
Serg Metelin 已提交
273 274 275 276 277 278

```
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
279
...
S
Serg Metelin 已提交
280
```
J
Jonathan Giszczak 已提交
281 282 283 284
<a name="nextsteps"></a>
### Next Steps

Further documentation is available in the [wiki](https://github.com/EOSIO/eos/wiki). Wiki pages include detailed reference documentation for all programs and tools and the database schema and API. The wiki also includes a section describing smart contract development. A simple walkthrough of the "currency" contract follows.
S
Serg Metelin 已提交
285

S
Sandwich 已提交
286
<a name="smartcontracts"></a>
S
Sandwich 已提交
287
## Example "Currency" Contract Walkthrough
S
Serg Metelin 已提交
288

289
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 已提交
290

S
Serg Metelin 已提交
291
<a name="smartcontractexample"></a>
S
Sandwich 已提交
292
### Example smart contracts
293

S
Sandwich 已提交
294
First, run the node
S
Serg Metelin 已提交
295

296
```bash
297 298
cd ~/eos/build/programs/eosiod/
./eosiod
S
Serg Metelin 已提交
299
```
300

S
Serg Metelin 已提交
301
<a name="walletimport"></a>
302
### Setting up a wallet and importing account key
S
Serg Metelin 已提交
303

304
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 已提交
305

306
```bash
307 308
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 已提交
309 310
```

311
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 已提交
312

S
Sandwich 已提交
313
```bash
314
./eosioc wallet import 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
S
Sandwich 已提交
315
```
S
Serg Metelin 已提交
316

S
Serg Metelin 已提交
317
<a name="createaccounts"></a>
S
Sandwich 已提交
318
### Creating accounts for sample "currency" contract
S
Serg Metelin 已提交
319

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

322
```bash
323 324 325
cd ~/eos/build/programs/eosioc/
./eosioc create key # owner_key
./eosioc create key # active_key
326 327
```

S
Sandwich 已提交
328
This will output two pairs of public and private keys
329 330 331

```
Private key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
332
Public key: EOSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
333 334
```

S
Sandwich 已提交
335
**Important:**
336 337
Save the values for future reference.

S
Sandwich 已提交
338
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
339

340
```bash
341
./eosioc create account inita currency PUBLIC_KEY_1 PUBLIC_KEY_2
342 343
```

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

S
Sandwich 已提交
346
Go ahead and check that the account was successfully created
347

348
```bash
349
./eosioc get account currency
350 351
```

352
If all went well, you will receive output similar to the following:
353 354 355

```json
{
356 357
  "account_name": "currency",
  "eos_balance": "0.0000 EOS",
358
  "staked_balance": "0.0001 EOS",
359 360 361
  "unstaking_balance": "0.0000 EOS",
  "last_unstaking_time": "2035-10-29T06:32:22",
...
362 363
```

S
Sandwich 已提交
364
Now import the active private key generated previously in the wallet:
365 366

```bash
367
./eosioc wallet import XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
368 369
```

S
Serg Metelin 已提交
370
<a name="uploadsmartcontract"></a>
371
### Upload sample "currency" contract to blockchain
372

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

375
```bash
376
./eosioc get code currency
D
Daniel Larimer 已提交
377 378 379
code hash: 0000000000000000000000000000000000000000000000000000000000000000
```

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

382
```bash
383
./eosioc set contract currency ../../contracts/currency/currency.wast ../../contracts/currency/currency.abi
S
Serg Metelin 已提交
384 385
```

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

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

390
```bash
391
./eosioc get code currency
S
Sandwich 已提交
392 393
```

394
It will return something like:
S
Sandwich 已提交
395
```bash
D
Daniel Larimer 已提交
396 397 398
code hash: 9b9db1a7940503a88535517049e64467a6e8f4e9e03af15e9968ec89dd794975
```

399 400 401 402 403 404
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 已提交
405
Next verify the currency contract has the proper initial balance:
D
Daniel Larimer 已提交
406

407
```bash
408
./eosioc get table currency currency account
D
Daniel Larimer 已提交
409 410
{
  "rows": [{
411 412
     "currency": 1381319428,
     "balance": 10000000
D
Daniel Larimer 已提交
413 414 415 416 417 418
     }
  ],
  "more": false
}
```

S
Serg Metelin 已提交
419
<a name="pushamessage"></a>
420
### Transfering funds with the sample "currency" contract
421

422
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 已提交
423

424
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 已提交
425

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

430
Below is a generalization that shows the `currency` account is only referenced once, to specify which contract to deliver the `transfer` message to.
431 432

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

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

S
Serg Metelin 已提交
438
<a name="readingcontract"></a>
S
Sandwich 已提交
439
### Reading sample "currency" contract balance
440

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

443
```bash
444
./eosioc get table inita currency account
D
Daniel Larimer 已提交
445 446
{
  "rows": [{
447 448
      "currency": 1381319428,
      "balance": 200000
D
Daniel Larimer 已提交
449 450 451 452
       }
    ],
  "more": false
}
453
./eosioc get table currency currency account
D
Daniel Larimer 已提交
454 455
{
  "rows": [{
456 457
      "currency": 1381319428,
      "balance": 9800000
D
Daniel Larimer 已提交
458 459 460 461
    }
  ],
  "more": false
}
S
Serg Metelin 已提交
462 463
```

464
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 已提交
465

S
Serg Metelin 已提交
466
<a name="localtestnet"></a>
467
## Running multi-node local testnet
S
Serg Metelin 已提交
468

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

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

473
```bash
S
Serg Metelin 已提交
474 475
cd ~/eos/build
cp ../genesis.json ./
476
./programs/eosio-launcher/eosio-launcher -p2 --skip-signature
S
Serg Metelin 已提交
477 478
```

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

481
You should see the following response:
S
Serg Metelin 已提交
482

483
```bash
484 485
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 已提交
486 487
```

488
To confirm the nodes are running, run the following `eosioc` commands:
489
```bash
490 491 492
~/eos/build/programs/eosioc
./eosioc -p 8888 get info
./eosioc -p 8889 get info
S
Serg Metelin 已提交
493 494
```

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

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

499 500 501 502 503 504 505 506 507 508 509 510 511 512 513
<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
514 515
Launched eosd.
See testnet_np/stderr.txt for eosd output.
516 517 518
Synching requires at least 8 minutes, depending on network conditions.
```

519
To confirm eosd operation and synchronization:
520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540

```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
```

541 542
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.
543

S
Serg Metelin 已提交
544
<a name="doxygen"></a>
545
## Doxygen documentation
S
Serg Metelin 已提交
546

547 548 549
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 已提交
550

S
Serg Metelin 已提交
551
<a name="docker"></a>
552
## Running EOS in Docker
peterwillcn's avatar
peterwillcn 已提交
553

554 555 556
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>
557
## Manual installation of the dependencies
558

559
If you prefer to manually build dependencies, follow the steps below.
560 561 562 563 564 565 566

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
567
* Boost 1.66
568 569 570 571 572
* OpenSSL
* LLVM 4.0
* [secp256k1-zkp (Cryptonomex branch)](https://github.com/cryptonomex/secp256k1-zkp.git)
* [binaryen](https://github.com/WebAssembly/binaryen.git)

573 574
<a name="cleaninstallamazon"></a>
### Clean install Amazon 2017.09 and higher
575 576 577 578

Install the development toolkit:

```bash
579 580 581 582 583 584
sudo yum update
sudo yum install git gcc72.x86_64 gcc72-c++.x86_64 autoconf automake libtool make bzip2 \
				 bzip2-devel.x86_64 openssl-devel.x86_64 gmp.x86_64 gmp-devel.x86_64 \
				 libstdc++72.x86_64 python27-devel.x86_64 libedit-devel.x86_64 \
				 ncurses-devel.x86_64 swig.x86_64 gettext-devel.x86_64

585 586
```

587
Install Boost 1.66:
588 589 590

```bash
cd ~
591 592
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
593
echo "export BOOST_ROOT=$HOME/boost_1_66_0" >> ~/.bash_profile
594
source ~/.bash_profile
595
cd boost_1_66_0/
596 597 598 599 600
./bootstrap.sh "--prefix=$BOOST_ROOT"
./b2 install
```

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

602 603 604 605 606 607
```bash
cd ~
git clone https://github.com/cryptonomex/secp256k1-zkp.git
cd secp256k1-zkp
./autogen.sh
./configure
608
make -j$( nproc )
609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641
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 ../
642 643
make -j$( nproc ) 
make install
644
```
645

646 647 648 649
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
650
echo "export LLVM_DIR=~/wasm-compiler/lib/cmake/llvm" >> ~/.bash_profile
651 652
source ~/.bash_profile
```
653
Your environment is set up. Now you can <a href="#runanode">build EOS and run a node</a>.
654

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

658
Install the development toolkit:
659 660

```bash
661 662 663 664 665
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
666 667 668

```

669
Install Boost 1.66:
670 671

```bash
672 673 674 675 676 677 678 679
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_66_0" >> ~/.bash_profile
source ~/.bash_profile
cd boost_1_66_0/
./bootstrap.sh "--prefix=$BOOST_ROOT"
./b2 install
680 681 682
```

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

684 685 686 687 688 689
```bash
cd ~
git clone https://github.com/cryptonomex/secp256k1-zkp.git
cd secp256k1-zkp
./autogen.sh
./configure
690
make -j$( nproc )
691 692 693
sudo make install
```

694
To use the WASM compiler, EOS has an external dependency on [binaryen](https://github.com/WebAssembly/binaryen.git):
695 696 697 698 699 700

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

703 704 705 706 707 708 709 710 711
```

Add `BINARYEN_ROOT` to your .bash_profile:

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

712
By default LLVM and clang do not include the WASM build target, so you will have to build it yourself:
713 714 715 716 717 718 719 720 721 722 723

```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 ../
724
make -j$( nproc ) install
725 726 727 728 729 730
```

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
731
echo "export LLVM_DIR=~/wasm-compiler/lib/cmake/llvm" >> ~/.bash_profile
732 733
source ~/.bash_profile
```
734
Your environment is set up. Now you can <a href="#runanode">build EOS and run a node</a>.
735

736 737
<a name="ubuntu"></a>
### Clean install Ubuntu 16.04 & Higher
738 739 740 741

Install the development toolkit:

```bash
742 743 744 745 746 747 748
sudo apt-get update
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -
sudo apt-get install clang-4.0 lldb-4.0 libclang-4.0-dev cmake make \
                     libbz2-dev libssl-dev libgmp3-dev \
                     autotools-dev build-essential \
                     libbz2-dev libicu-dev python-dev \
                     autoconf libtool git
749 750 751 752 753 754
```

Install Boost 1.66:

```bash
cd ~
755 756 757
wget -c 'https://sourceforge.net/projects/boost/files/boost/1.64.0/boost_1_66_0.tar.bz2/download' -O boost_1.64.0.tar.bz2
tar xjf boost_1.66.0.tar.bz2
cd boost_1_66_0/
758
echo "export BOOST_ROOT=$HOME/boost_1_66_0" >> ~/.bash_profile
759 760 761
source ~/.bash_profile
./bootstrap.sh "--prefix=$BOOST_ROOT"
./b2 install
762
source ~/.bash_profile
763 764 765 766 767 768 769 770 771 772
```

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
773
make
774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806
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 ../
807
make -j4 install
808 809 810
```
Add `WASM_LLVM_CONFIG` and `LLVM_DIR` to your `.bash_profile`:

811 812
```bash
echo "export WASM_LLVM_CONFIG=~/wasm-compiler/llvm/bin/llvm-config" >> ~/.bash_profile
813
echo "export LLVM_DIR=/usr/local/Cellar/llvm/4.0.1/lib/cmake/llvm" >> ~/.bash_profile
814 815
source ~/.bash_profile
```
816

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

819 820
<a name="macos"></a>
### MacOS Sierra 10.12.6 & higher
821

822 823 824 825 826 827
macOS additional Dependencies:

* Brew
* Newest XCode

Upgrade your XCode to the newest version:
828 829

```bash
830 831 832 833
xcode-select --install
```

Install homebrew:
834

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

839
Install the dependencies:
840 841

```bash
842 843 844
brew update
brew install git automake libtool boost openssl llvm@4 gmp ninja gettext
brew link gettext --force
845 846 847 848 849 850 851 852 853 854
```

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
855
make -j$( sysctl -in machdep.cpu.core_count )
856 857 858
sudo make install
```

859
Install [binaryen v1.37.14](https://github.com/WebAssembly/binaryen.git):
860 861 862 863 864 865

```bash
cd ~
git clone https://github.com/WebAssembly/binaryen.git
cd ~/binaryen
git checkout tags/1.37.14
866
cmake . && make -j$( sysctl -in machdep.cpu.core_count )
867 868 869 870 871 872 873 874 875
```

Add `BINARYEN_ROOT` to your .bash_profile:

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

876
Build LLVM and clang for WASM:
877 878 879 880 881 882 883 884 885 886 887

```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 ../
888
make -j$( sysctl -in machdep.cpu.core_count )
889 890 891 892 893
make install
```

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

894 895
```bash
echo "export WASM_LLVM_CONFIG=~/wasm-compiler/llvm/bin/llvm-config" >> ~/.bash_profile
896
echo "export LLVM_DIR=/usr/local/Cellar/llvm@4/4.0.1/lib/cmake/llvm/" >> ~/.bash_profile
897
source ~/.bash_profile
898
```
899
Your environment is set up. Now you can <a href="#runanode">build EOS and run a node</a>.