# 私链搭建（多机多节点）

## 最终创建三个虚拟机，三个生产节点的私链

各节点之间通过区块服务nodeos联通，区块服务是对公网的

钱包服务keosd传输密钥时使用明文，所以只对本机提供服务

cleos通过四个参数，设置连接哪个keosd和哪个nodeos

cleos也可以直接使用nodeos提供的本地钱包服务操作钱包，但nodeos要加载钱包插件

## 开启服务

```bash
#BC01
./nodeos --http-server-address 0.0.0.0:8888 --p2p-listen-endpoint 0.0.0.0:9876 --enable-stale-production --producer-name eosio --plugin eosio::chain_api_plugin --plugin eosio::net_api_plugin --plugin eosio::wallet_api_plugin  --plugin eosio::account_history_api_plugin 1>nodeos.log 2>&1 &
./keosd --http-server-address 127.0.0.1:8899 1>keosd.log 2>&1 & 

#BC02，--p2p-peer-address指向BC01
./nodeos --http-server-address 0.0.0.0:8888 --p2p-listen-endpoint 0.0.0.0:9876 --p2p-peer-address 172.16.172.81:9876 --enable-stale-production --producer-name eosio --plugin eosio::chain_api_plugin --plugin eosio::net_api_plugin --plugin eosio::wallet_api_plugin  --plugin eosio::account_history_api_plugin 1>nodeos.log 2>&1 &
./keosd --http-server-address 127.0.0.1:8899 1>keosd.log 2>&1 & 

#BC03，--p2p-peer-address指向BC01
./nodeos --http-server-address 0.0.0.0:8888 --p2p-listen-endpoint 0.0.0.0:9876 --p2p-peer-address 172.16.172.81:9876 --enable-stale-production --producer-name eosio --plugin eosio::chain_api_plugin --plugin eosio::net_api_plugin --plugin eosio::wallet_api_plugin  --plugin eosio::account_history_api_plugin 1>nodeos.log 2>&1 &
./keosd --http-server-address 127.0.0.1:8899 1>keosd.log 2>&1 & 
```

## 创建钱包与账号

```bash
#BC01
#创建钱包、生成并导入密钥，创建账号
./cleos --wallet-port 8899  wallet create
"PW5KDZZWxtGroTQG8d1v1fiRm2FvNfE8QZzvnfZLEV8BGRPw8Tx8X"

./cleos create key
Private key: 5KPRMHBNnXLybgHFhFb7wVF9hLkRKu4aLb7s7xNaZVND8GtunT8
Public key: EOS5wfaugnegAjXPSTgaquJL51taDmqftbGFcWmvNoDKMsYzrnydX
./cleos --wallet-port 8899 wallet import -n default 5KPRMHBNnXLybgHFhFb7wVF9hLkRKu4aLb7s7xNaZVND8GtunT8

./cleos --wallet-port 8899 create account eosio token1 EOS5wfaugnegAjXPSTgaquJL51taDmqftbGFcWmvNoDKMsYzrnydX EOS5wfaugnegAjXPSTgaquJL51taDmqftbGFcWmvNoDKMsYzrnydX
./cleos --wallet-port 8899 create account eosio patient1 EOS5wfaugnegAjXPSTgaquJL51taDmqftbGFcWmvNoDKMsYzrnydX EOS5wfaugnegAjXPSTgaquJL51taDmqftbGFcWmvNoDKMsYzrnydX

#BC02
#创建钱包、生成并导入密钥，创建账号
./cleos --wallet-port 8899  wallet create
"PW5JJv6uxu8FcxT3zRbzVuxDquKFeeGQJj6f2kguXqfApSx9Lyg5k"

./cleos create key
Private key: 5K2G75aBEqBWRZdJZcFcb7gCjezcxfC8hFMUk4XVPmGj8JmqSCA
Public key: EOS5baefwj8ALkjjo9fZsjtDagYecd3VYVjwaMuVN55e44ViJQXve
./cleos --wallet-port 8899 wallet import -n default 5K2G75aBEqBWRZdJZcFcb7gCjezcxfC8hFMUk4XVPmGj8JmqSCA

./cleos --wallet-port 8899 create account eosio patient2 EOS5baefwj8ALkjjo9fZsjtDagYecd3VYVjwaMuVN55e44ViJQXve EOS5baefwj8ALkjjo9fZsjtDagYecd3VYVjwaMuVN55e44ViJQXve

#BC03
#创建钱包、生成并导入密钥，创建账号
./cleos --wallet-port 8899  wallet create
"PW5JWH5MHmrZhAgbmmmMNEHj4hdG2HxueCX8amKaNxX5o1kycLkmf"

./cleos create key
Private key: 5JM4jmDJoBdjTksz5KcBkCqrZxB3hi11GCPohbMg67r2pZu1P1E
Public key: EOS5MwWYV4dDVyrY3gpiZRfPpvX2ADWA2C8n9TT4D1Qho7BHHSLKh
./cleos --wallet-port 8899 wallet import -n default 5JM4jmDJoBdjTksz5KcBkCqrZxB3hi11GCPohbMg67r2pZu1P1E

./cleos --wallet-port 8899 create account eosio patient3 EOS5MwWYV4dDVyrY3gpiZRfPpvX2ADWA2C8n9TT4D1Qho7BHHSLKh EOS5MwWYV4dDVyrY3gpiZRfPpvX2ADWA2C8n9TT4D1Qho7BHHSLKh

```

## 加载智能合约，发币并转账

```bash
#BC01
./cleos --wallet-port 8899 set contract token1 ../contracts/eosio.token -p token1
./cleos --wallet-port 8899 push action token1 create '{"issuer":"token1", "maximum_supply":"10000.00 CT", "can_freeze":0, "can_recall":0, "can_whitelist":0}' -p token1
./cleos --wallet-port 8899 push action token1 issue '["patient1", "100.00 CT", "memo"]' -p token1
./cleos --wallet-port 8899 push action token1 transfer '["patient1", "patient2", "5.00 CT", "Just a test" ]' -p patient1

#BC02
./cleos --wallet-port 8899 push action token1 transfer '["patient2", "patient3", "2.00 CT", "Just a test" ]' -p patient2

#BC03
./cleos --wallet-port 8899 push action token1 transfer '["patient3", "patient1", "1.00 CT", "Just a test" ]' -p patient3

```

## 查询结果

```bash
#任意节点
./cleos --wallet-port 8899 get table token1 token1 accounts
{
  "rows": [{
      "balance": "0.00 CT",
      "frozen": 0,
      "whitelist": 1
    }
  ],
  "more": false
}

./cleos --wallet-port 8899 get table token1 patient1 accounts
{
  "rows": [{
      "balance": "96.00 CT",
      "frozen": 0,
      "whitelist": 1
    }
  ],
  "more": false
}


./cleos --wallet-port 8899 get table token1 patient2 accounts
{
  "rows": [{
      "balance": "3.00 CT",
      "frozen": 0,
      "whitelist": 1
    }
  ],
  "more": false
}


./cleos --wallet-port 8899 get table token1 patient3 accounts
{
  "rows": [{
      "balance": "1.00 CT",
      "frozen": 0,
      "whitelist": 1
    }
  ],
  "more": false
}

```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://neochain.gitbook.io/project/eos/si-lian-da-jian-duo-ji-duo-jie-dian.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
