README.md 17.2 KB
Newer Older
N
Nathan Hourt 已提交
1 2
# Eos

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

5
Welcome to the EOS.IO source code repository!
N
Nathan Hourt 已提交
6

7 8 9
# Table of contents

1. [Getting Started](#gettingstarted)
S
Serg Metelin 已提交
10
2. [Setting up a build/development environment](#setup)
11
	1. [Clean install Ubuntu 16.10](#ubuntu)
12
	2. [macOS Sierra 10.12.6](#macos)
S
Serg Metelin 已提交
13
3. [Building EOS and running a node](#runanode)
14 15 16 17 18 19 20 21
	1. [Getting the code](#getcode)
	2. [Building from source code](#build)
	3. [Creating and launching a single-node testnet](#singlenode)
4. [Accounts and smart contracts](#accountssmartcontracts)
	1. [Example smart contracts](#smartcontractexample)
	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)
22
	5. [Pushing a message to a sample contract](#pushamessage)
23 24
	6. [Reading Currency Contract Balance](#readingcontract)
5. [Running local testnet](#localtestnet)
S
Serg Metelin 已提交
25 26
6. [Doxygen documentation](#doxygen)
7. [Running EOS in Docker](#docker)
27
	1. [Running contract in docker example](#dockercontract)
28

S
Serg Metelin 已提交
29 30
<a name="gettingstarted"></a>
## Getting Started
31
The following instructions overview 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 已提交
32

S
Serg Metelin 已提交
33 34
<a name="setup"></a>
## Setting up a build/development environment
35
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.
N
Nathan Hourt 已提交
36

37
Dependencies:
S
Serg Metelin 已提交
38

39
* Clang 4.0.0
40 41
* CMake 3.5.1
* Boost 1.64
S
Serg Metelin 已提交
42
* OpenSSL
43 44
* LLVM 4.0
* [secp256k1-zkp (Cryptonomex branch)](https://github.com/cryptonomex/secp256k1-zkp.git)
S
Serg Metelin 已提交
45
* [binaryen](https://github.com/WebAssembly/binaryen.git)
46

S
Serg Metelin 已提交
47 48
<a name="ubuntu"></a>
### Clean install Ubuntu 16.10 
49 50 51

Install the development toolkit:

52
```bash
53
sudo apt-get update
54 55 56
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add -
sudo apt-get install clang-4.0 lldb-4.0 cmake make \
                     libbz2-dev libssl-dev libgmp3-dev \
57
                     autotools-dev build-essential \
58
                     libbz2-dev libicu-dev python-dev \
59 60 61 62 63
                     autoconf libtool git
```

Install Boost 1.64:

64
```bash
65 66 67 68
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/
S
Serg Metelin 已提交
69 70
echo "export BOOST_ROOT=$HOME/opt/boost_1_64_0" >> ~/.bash_profile
source ~/.bash_profile
71 72
./bootstrap.sh "--prefix=$BOOST_ROOT"
./b2 install
S
Serg Metelin 已提交
73
source ~/.bash_profile
74 75
```

76 77
Install [secp256k1-zkp (Cryptonomex branch)](https://github.com/cryptonomex/secp256k1-zkp.git):
        
78
```bash
79 80 81 82 83 84 85 86 87
cd ~
git clone https://github.com/cryptonomex/secp256k1-zkp.git
cd secp256k1-zkp
./autogen.sh
./configure
make
sudo make install
```

88
To use the WASM compiler, EOS has an external dependency on [binaryen](https://github.com/WebAssembly/binaryen.git):
S
Serg Metelin 已提交
89

90
```bash
S
Serg Metelin 已提交
91 92 93 94 95 96 97 98
cd ~
git clone https://github.com/WebAssembly/binaryen.git
cd ~/binaryen
git checkout tags/1.37.14
cmake . && make

```

L
Liu-Cheng Xu 已提交
99
Add `BINARYEN_ROOT` to your .bash_profile:
S
Serg Metelin 已提交
100

101
```bash
S
Serg Metelin 已提交
102 103 104
echo "export BINARYEN_ROOT=~/binaryen" >> ~/.bash_profile
source ~/.bash_profile
```
D
Daniel Larimer 已提交
105

S
Serg Metelin 已提交
106
By default LLVM and clang do not include the WASM build target, so you will have to build it yourself:
107

108
```bash
109 110 111 112 113 114 115 116 117 118
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
119
```
120

S
Serg Metelin 已提交
121 122
Your environment is set up. Now you can <a href="#runanode">build EOS and run a node</a>. 

S
Serg Metelin 已提交
123 124
<a name="macos"></a>
### macOS Sierra 10.12.6 
125 126

macOS additional Dependencies:
S
Serg Metelin 已提交
127

128 129 130 131 132
* Brew
* Newest XCode

Upgrade your XCode to the newest version:

133
```bash
134
xcode-select --install
135 136
```

137
Install homebrew:
138

139
```bash
140 141 142 143 144
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

Install the dependencies:

145
```bash
146
brew update
J
jaehong park 已提交
147
brew install git automake libtool boost openssl llvm gmp
148
```
149

150 151
Install [secp256k1-zkp (Cryptonomex branch)](https://github.com/cryptonomex/secp256k1-zkp.git):
        
152
```bash
153 154 155 156 157 158 159
cd ~
git clone https://github.com/cryptonomex/secp256k1-zkp.git
cd secp256k1-zkp
./autogen.sh
./configure
make
sudo make install
160
```
161

S
Serg Metelin 已提交
162 163
Install [binaryen v1.37.14](https://github.com/WebAssembly/binaryen.git):

164
```bash
S
Serg Metelin 已提交
165 166 167 168 169 170 171
cd ~
git clone https://github.com/WebAssembly/binaryen.git
cd ~/binaryen
git checkout tags/1.37.14
cmake . && make
```

L
Liu-Cheng Xu 已提交
172
Add `BINARYEN_ROOT` to your .bash_profile:
S
Serg Metelin 已提交
173

174
```bash
S
Serg Metelin 已提交
175 176 177 178 179
echo "export BINARYEN_ROOT=~/binaryen" >> ~/.bash_profile
source ~/.bash_profile
```


180 181
Build LLVM and clang for WASM:

182
```bash
183 184 185 186 187 188 189 190 191 192 193 194
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
```

S
Serg Metelin 已提交
195
Add `WASM_LLVM_CONFIG` and `LLVM_DIR` to your `.bash_profile`:
196

197
```bash
198 199
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
S
Serg Metelin 已提交
200
source ~/.bash_profile
201 202
```

S
Serg Metelin 已提交
203
<a name="runanode"></a>
S
Serg Metelin 已提交
204
## Building EOS and running a node 
S
Serg Metelin 已提交
205

S
Serg Metelin 已提交
206 207
<a name="getcode"></a>
### Getting the code 
S
Serg Metelin 已提交
208

209
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 已提交
210

211 212 213
```bash
git clone https://github.com/eosio/eos --recursive
```
N
Nathan Hourt 已提交
214 215 216

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:

217 218 219
```bash
git submodule update --init --recursive
```
N
Nathan Hourt 已提交
220

S
Serg Metelin 已提交
221 222
<a name="build"></a>
### Building from source code 
223

224 225
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.
226

227
```bash
S
Serg Metelin 已提交
228
cd ~
229
git clone https://github.com/eosio/eos --recursive
S
Serg Metelin 已提交
230
mkdir -p ~/eos/build && cd ~/eos/build
J
jaehong park 已提交
231
cmake -DBINARYEN_BIN=~/binaryen/bin -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DOPENSSL_LIBRARIES=/usr/local/opt/openssl/lib ..
232 233 234 235
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 已提交
236 237 238 239 240

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

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

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

* eosd - server-side blockchain node component
* eosc - command line interface to interact with the blockchain
* eos-walletd - EOS wallet
S
Serg Metelin 已提交
248
* launcher - application for nodes network composing and deployment; [more on launcher](https://github.com/EOSIO/eos/blob/master/testnet.md)
S
Serg Metelin 已提交
249

S
Serg Metelin 已提交
250 251
<a name="singlenode"></a>
### Creating and launching a single-node testnet 
S
Serg Metelin 已提交
252

L
Liu-Cheng Xu 已提交
253
After successfully building the project, the `eosd` binary should be present in the `programs/eosd` directory. Go ahead and run `eosd` -- it will probably exit with an error, but if not, close it immediately with <kbd>Ctrl-C</kbd>. Note that `eosd` 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 `eosd`.
N
Nathan Hourt 已提交
254

N
Nathan Hourt 已提交
255
Edit the `config.ini` file, adding the following settings to the defaults already in place:
N
Nathan Hourt 已提交
256 257

```
N
Nathan Hourt 已提交
258 259 260 261 262
# Load the testnet genesis state, which creates some initial block producers with the default key
genesis-json = /path/to/eos/source/genesis.json
# Enable production on a stale chain, since a single-node test chain is pretty much always stale
enable-stale-production = true
# Enable block production with the testnet producers
263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283
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 已提交
284
# Load the block producer plugin, so you can produce blocks
N
Nathan Hourt 已提交
285
plugin = eos::producer_plugin
S
Serg Metelin 已提交
286
# Wallet plugin
287
plugin = eos::wallet_api_plugin
S
Serg Metelin 已提交
288
# As well as API and HTTP plugins
289 290
plugin = eos::chain_api_plugin
plugin = eos::http_plugin
N
Nathan Hourt 已提交
291 292
```

293
Now it should be possible to run `eosd` and see it begin producing blocks.
peterwillcn's avatar
peterwillcn 已提交
294

S
Serg Metelin 已提交
295 296 297 298 299 300 301 302 303 304 305 306 307 308
When running `eosd` you should get log messages similar to below. It means the blocks are successfully produced.

```
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
1581001ms thread-0   chain_controller.cpp:235      _push_block          ] initd #3 @2017-09-04T04:26:21  | 0 trx, 0 pending, exectime_ms=0
1581001ms thread-0   producer_plugin.cpp:207       block_production_loo ] initd generated block #3 @ 2017-09-04T04:26:21 with 0 trxs  0 pending
1584000ms thread-0   chain_controller.cpp:235      _push_block          ] inite #4 @2017-09-04T04:26:24  | 0 trx, 0 pending, exectime_ms=0
1584000ms thread-0   producer_plugin.cpp:207       block_production_loo ] inite generated block #4 @ 2017-09-04T04:26:24 with 0 trxs  0 pending
1587000ms thread-0   chain_controller.cpp:235      _push_block          ] initf #5 @2017-09-04T04:26:27  | 0 trx, 0 pending, exectime_ms=0
```

S
Serg Metelin 已提交
309 310
<a name="accountssmartcontracts"></a>
## Accounts and smart contracts 
S
Serg Metelin 已提交
311

312
EOS comes with example contracts that can be uploaded and run for testing purposes. To upload and test them, follow the steps below.
S
Serg Metelin 已提交
313

S
Serg Metelin 已提交
314 315
<a name="smartcontractexample"></a>
### Example smart contracts 
316 317 318

To publish sample smart contracts you need to create accounts for them.

S
Serg Metelin 已提交
319 320
Run the node:

321
```bash
S
Serg Metelin 已提交
322
cd ~/eos/build/programs/eosd/
S
Serg Metelin 已提交
323
./eosd
S
Serg Metelin 已提交
324
```
325

S
Serg Metelin 已提交
326 327
<a name="walletimport"></a>
### Setting up a wallet and importing account key 
S
Serg Metelin 已提交
328

329
Before running API commands you need to import the private key of an account you will be authorizing the transactions under into the EOS wallet.
S
Serg Metelin 已提交
330

331
As you've previously added `plugin = eos::wallet_api_plugin` into `config.ini`, EOS wallet will be running as a part of `eosd` process.
S
Serg Metelin 已提交
332

333
For testing purposes you can use a pre-created account `inita` from the `genesis.json` file.
S
Serg Metelin 已提交
334 335 336

To login you need to run a command importing an active (not owner!) private key from `inita` account (you can find it in `~/eos/build/programs/eosd/data-dir/config.ini`) to the wallet.

337
```bash
S
Serg Metelin 已提交
338
cd ~/eos/build/programs/eosc/
339 340
./eosc wallet create # Outputs a password that you need to save to be able to lock/unlock the wallet
./eosc wallet import 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
S
Serg Metelin 已提交
341 342
```

343
Now you can issue API commands under `inita` authority.
S
Serg Metelin 已提交
344

S
Serg Metelin 已提交
345 346
<a name="createaccounts"></a>
### Creating accounts for your smart contracts 
S
Serg Metelin 已提交
347

348
First, generate public/private key pairs for the `owner_key` and `active_key`. You will need them to create an account:
349

350
```bash
351 352 353 354 355 356 357 358 359 360 361 362
cd ~/eos/build/programs/eosc/
./eosc create key
./eosc create key
```

You will get two pairs of a public and private key:

```
Private key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Public key:  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
```

363
**Warning:**
364 365 366 367
Save the values for future reference.

Run `create` command where `PUBLIC_KEY_1` and `PUBLIC_KEY_2` are the values generated by the `create key` command:

368
```bash
369
./eosc create account inita currency PUBLIC_KEY_1 PUBLIC_KEY_2 
370 371 372 373
```

You should get a json response back with a transaction ID confirming it was executed successfully.

374 375
Check that account was successfully created: 

376
```bash
S
Serg Metelin 已提交
377
./eosc get account currency
378 379 380 381 382 383
```

You should get a response similar to this:

```json
{
S
Serg Metelin 已提交
384
  "name": "currency",
385 386 387 388 389 390 391
  "eos_balance": 0,
  "staked_balance": 1,
  "unstaking_balance": 0,
  "last_unstaking_time": "2106-02-07T06:28:15"
}
```

S
Serg Metelin 已提交
392 393
<a name="uploadsmartcontract"></a>
### Upload sample contract to blockchain 
394

395
Before uploading a contract, you can verify that there is no current contract:
D
Daniel Larimer 已提交
396

397
```bash
D
Daniel Larimer 已提交
398 399 400 401
./eosc get code currency 
code hash: 0000000000000000000000000000000000000000000000000000000000000000
```

402 403 404 405 406 407
Before you can upload currency contract you need to import its private key that you generated using `create key` command:

```bash
./eosc wallet import PRIVATE_KEY_2
```

408
With an account for a contract created, you can upload a sample contract:
409

410
```bash
411
./eosc set contract currency ../../contracts/currency/currency.wast ../../contracts/currency/currency.abi
S
Serg Metelin 已提交
412 413 414 415
```

As a response you should get a json with a `transaction_id` field. Your contract was successfully uploaded!

416
You can also verify that the code has been set:
D
Daniel Larimer 已提交
417

418
```bash
D
Daniel Larimer 已提交
419 420 421 422
./eosc get code currency
code hash: 9b9db1a7940503a88535517049e64467a6e8f4e9e03af15e9968ec89dd794975
```

423
Next you can verify that the currency contract has the proper initial balance:
D
Daniel Larimer 已提交
424

425
```bash
D
Daniel Larimer 已提交
426 427 428 429 430 431 432 433 434 435 436
./eosc get table currency currency account
{
  "rows": [{
     "account": "account",
     "balance": 1000000000
     }
  ],
  "more": false
}
```

S
Serg Metelin 已提交
437
<a name="pushamessage"></a>
438
### Pushing a message to a sample contract 
S
Serg Metelin 已提交
439

440
To send a message to a contract you need to create a new user account who will be sending the message.
S
Serg Metelin 已提交
441 442 443

Firstly, generate the keys for the account:

444
```bash
S
Serg Metelin 已提交
445 446 447
cd ~/eos/build/programs/eosc/
./eosc create key
./eosc create key
448 449
```

S
Serg Metelin 已提交
450 451
And then create the `tester` account:

452
```bash
453
./eosc create account inita tester PUBLIC_USER_KEY_1 PUBLIC_USER_KEY_2 
S
Serg Metelin 已提交
454 455
```

456
After this you can send a message to the contract:
S
Serg Metelin 已提交
457

458
```bash
459
./eosc push message currency transfer '{"from":"currency","to":"inita","amount":50}' --scope currency,inita --permission currency@active
D
Daniel Larimer 已提交
460 461 462 463
```

As a confirmation of a successfully submitted transaction you will get a json with a `transaction_id` field.

S
Serg Metelin 已提交
464
<a name="readingcontract"></a>
465 466
### Reading currency contract balance 

D
Daniel Larimer 已提交
467

468
```bash
D
Daniel Larimer 已提交
469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486
./eosc get table inita currency account
{
  "rows": [{
      "account": "account",
      "balance": 50 
       }
    ],
  "more": false
}
./eosc get table currency currency account
{
  "rows": [{
      "account": "account",
      "balance": 999999950
    }
  ],
  "more": false
}
S
Serg Metelin 已提交
487 488
```

S
Serg Metelin 已提交
489 490
<a name="localtestnet"></a>
## Running local testnet 
S
Serg Metelin 已提交
491

S
Serg Metelin 已提交
492
To run a local testnet you can use a `launcher` application provided in `~/eos/build/programs/launcher` folder.
S
Serg Metelin 已提交
493

S
Serg Metelin 已提交
494
For testing purposes you will run 2 local production nodes talking to each other.
S
Serg Metelin 已提交
495

496
```bash
S
Serg Metelin 已提交
497 498
cd ~/eos/build
cp ../genesis.json ./
499
./programs/launcher/launcher -p2 --skip-signatures
S
Serg Metelin 已提交
500 501
```

502
This command will generate 2 data folders for each instance of the node: `tn_data_0` and `tn_data_1`.
S
Serg Metelin 已提交
503 504 505

You should see a following response:

506
```bash
S
Serg Metelin 已提交
507 508 509 510 511 512 513 514
adding hostname ip-XXX-XXX-XXX
found interface 127.0.0.1
found interface XXX.XX.XX.XX
spawning child, programs/eosd/eosd --skip-transaction-signatures --data-dir tn_data_0
spawning child, programs/eosd/eosd --skip-transaction-signatures --data-dir tn_data_1
```

To confirm the nodes are running, run following `eosc` commands:
515
```bash
S
Serg Metelin 已提交
516 517 518 519 520
~/eos/build/programs/eosc
./eosc -p 8888 get info
./eosc -p 8889 get info
```

S
Serg Metelin 已提交
521
For each you should get a json with a blockchain information.
S
Serg Metelin 已提交
522

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

S
Serg Metelin 已提交
525 526
<a name="doxygen"></a>
## Doxygen documentation 
S
Serg Metelin 已提交
527 528 529

You can find more detailed API documentation in Doxygen reference: https://eosio.github.io/eos/

S
Serg Metelin 已提交
530 531
<a name="docker"></a>
## Running EOS in Docker 
peterwillcn's avatar
peterwillcn 已提交
532

533
Simple and fast setup of EOS in Docker is also available. Firstly, install dependencies:
534

peterwillcn's avatar
peterwillcn 已提交
535 536 537 538
 - [Docker](https://docs.docker.com)
 - [Docker-compose](https://github.com/docker/compose)
 - [Docker-volumes](https://github.com/cpuguy83/docker-volumes)

L
Liu-Cheng Xu 已提交
539
Build eos image:
peterwillcn's avatar
peterwillcn 已提交
540 541


542
```bash
S
Serg Metelin 已提交
543 544 545 546
git clone https://github.com/EOSIO/eos.git --recursive
cd eos
cp genesis.json Docker 
docker build -t eosio/eos -f Docker/Dockerfile .
peterwillcn's avatar
peterwillcn 已提交
547 548
```

S
Serg Metelin 已提交
549 550
We recommend 6GB+ of memory allocated to Docker to successfully build the image.

S
Serg Metelin 已提交
551
Now you can start the Docker container:
peterwillcn's avatar
peterwillcn 已提交
552

553
```bash
peterwillcn's avatar
peterwillcn 已提交
554
sudo rm -rf /data/store/eos # options 
peterwillcn's avatar
peterwillcn 已提交
555
sudo mkdir -p /data/store/eos
S
Serg Metelin 已提交
556
docker-compose -f Docker/docker-compose.yml up
peterwillcn's avatar
peterwillcn 已提交
557 558
```

559
Get chain info:
560

561
```bash
562 563 564
curl http://127.0.0.1:8888/v1/chain/get_info
```

S
Serg Metelin 已提交
565
<a name="dockercontract"></a>
566
### Running contract in docker example 
S
Serg Metelin 已提交
567

568
You can run the `eosc` commands via `docker exec` command. For example:
S
Serg Metelin 已提交
569

570
```bash
571
docker exec docker_eos_1 eosc contract exchange build/contracts/exchange/exchange.wast build/contracts/exchange/exchange.abi
572
```