官方文档
git clone https://github.com/EOSIO/eos --recursive # --recursive表示自动获取更新子项目,至关于: # git submodule update --init --recursive
笔者目前采起第一种方式编译,4核8G的电脑编译了2个小时。node
# 1.命令行启动 $ cd build/programs/nodeos $ ./nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin # 2.经过配置config.ini方式 # 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 producer-name = eosio # Load the block producer plugin, so you can produce blocks # plugin = eosio::producer_plugin # As well as API and HTTP plugins plugin = eosio::chain_api_plugin # plugin = eosio::http_plugin # This will be used by the validation step below, to view history plugin = eosio::history_api_plugin
// 第一个窗口 $ keosd --http-server-address 127.0.0.1:8899 // 实践发现,上述步骤能够省略,每次运行cleos命令,未开启keosd会默认开启一个服务。
// 第二个窗口 $ cleos wallet create --to-console // 备份密码未来使用 Creating wallet: default Save password to use in the future to unlock this wallet. Without password imported keys will not be retrievable. "PW5JsmfYz2wrdUEotTzBamUCAunAA8TeRZGT57Ce6PkvM12tre8Sm"
上面步骤中启动的私有区块链是用默认的初始键建立的,该初始键必须加载到钱包中。
在自动生成的config.ini文件中,我看到了同样的私钥对。ios
$ cleos wallet import --private-key 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3 imported private key for: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
// 第三个窗口 $ nodeos --enable-stale-production --producer-name eosio --plugin eosio::chain_api_plugin --plugin eosio::net_api_plugin
这个命令在${EOSIO_SOURCE}
目录运行。在启动额外的节点以前,你必须先加载eosio.bios
合约。
该合约使您可以直接控制其余账户的资源分配,并访问其余特权API调用。返回到第二个终端窗口,运行如下命令加载合同:git
// 第二个窗口 // 遇到的坑 1.卡主不动没法继续运行,重启电脑搞定。2.官网文档没有加"-p eosio",致使失败。 $ cleos set contract eosio build/contracts/eosio.bios -p eosio $ cleos create key Private key: 5JgbL2ZnoEAhTudReWH1RnMuQS6DBeLZt4ucV6t8aymVEuYg7sr Public key: EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg $ cleos wallet import 5JgbL2ZnoEAhTudReWH1RnMuQS6DBeLZt4ucV6t8aymVEuYg7sr imported private key for: EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg // 建立一个帐户须要2个public key;一个是owner key和active key. 这里2个key同样。 $ cleos create account eosio inita EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg executed transaction: d1ea511977803d2d88f46deb554f5b6cce355b9cc3174bec0da45fc16fe9d5f3 352 bytes 102400 cycles # eosio <= eosio::newaccount {"creator":"eosio","name":"inita","owner":{"threshold":1,"keys":[{"key":"EOS6hMjoWRF2L8x9YpeqtUEcsDK...
// 第四个窗口 $ nodeos --producer-name inita --plugin eosio::chain_api_plugin --plugin eosio::net_api_plugin --http-server-address 127.0.0.1:8889 --p2p-listen-endpoint 127.0.0.1:9877 --p2p-peer-address 127.0.0.1:9876 --config-dir node2 --data-dir node2 --private-key [\"EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg\",\"5JgbL2ZnoEAhTudReWH1RnMuQS6DBeLZt4ucV6t8aymVEuYg7sr\"] // 到这里,第二个节点是一个空闲的producer。切换producer,让inita变成active producer,须要bios node操做 $ cleos push action eosio setprods "{ \"schedule\": [{\"producer_name\": \"inita\",\"block_signing_key\": \"EOS6hMjoWRF2L8x9YpeqtUEcsDKAyxSuM1APicxgRU1E3oyV5sDEg\"}]}" -p eosio@active executed transaction: 2cff4d96814752aefaf9908a7650e867dab74af02253ae7d34672abb9c58235a 272 bytes 105472 cycles # eosio <= eosio::setprods {"version":1,"producers":[{"producer_name":"inita","block_signing_key":"EOS6hMjoWRF2L8x9YpeqtUEcsDKA...
// 验证结果 cleos get info cleos --url http://127.0.0.1:8889 get info