快速安装
依赖
系统平台要求
CITA的运行环境是Linux和OSX操作系统,目前不支持Windows系统。CITA是基于Ubuntu 16.04稳定版开发的,在该系统版本上运行将是正确无误的。如果在Linux系统的其他版本上运行出现问题,建议将系统版本切换到Ubuntu 16.04版本。python版本是2.7。
注意:
- Ubuntu要获取root权限,然后操作,否则会出现很多问题。获取权限方法,
参考:http://blog.csdn.net/xiatiancc/article/details/79298229
- 可以参考以太坊的安装环境先配置:http://blog.csdn.net/xiatiancc/article/details/78932848
安装编译器及开发库
不要直接从Github仓库下载CITA的源代码,解压缩编译,通过git命令获取CITA的源代码目录:
git clone https://github.com/cryptape/cita
cd cita
git submodule init
git submodule update
启动 install_develop.sh
脚本安装依赖,命令如下:
scripts/install_develop.sh
如果出现以下问题
- setuptools版本
如果出现此问题,证明setuptools版本太高,降版本到3.7即可,
pip install setuptools==37
- 安装中断
安装完成后,可以重新登录使Rust相关的环境变量生效,也可直接使用以下命令立即生效:
source ~/.cargo/env
经过如上设置,CITA的依赖便安装完成了。
安装
单元测试依赖rabbitmq, 如果没有启动,需要用以下脚本启动并配置
scripts/config_rabbitmq.sh
可以按照自己的需求自行选择相应的编译方式(Debug-调试模式 或 Release-发行模式)
make debug
或者
make release
如果编译出现问题,重新启动的OS。
出现下图问题,则证明没有在root下进行安装操作:
编译成功后,其生成的可执行文件将放在target/install
目录下,生产环境下只能看到target/install里面的内容。
配置
先切换到发布件目录,并将bin目录加入到PATH环境变量中:
cd target/install
export PATH=$PWD/bin:$PATH
另外,脚本admintool.sh
主要用来创建创世块配置、节点相关配置、网络连接配置、私钥配置等相关文件。
设置节点的配置信息,该默认示例Demo中配置了4个节点,对Demo中的节点进行默认初始化的操作命令为:
./bin/admintool.sh
此外,用户可以根据需要更改其中的默认配置,使用命令admintool.sh -h
来获得详细帮助,允许自定义配置包括:
./bin/admintool.sh: option requires an argument -- h
usage: ./bin/admintool.sh -a admin_id -l ip_list -n consensus_name -m crypto_method -d block_duration -t
option:
-a admin_id admin identifier
default value is 'admin'
-l ip_list list all the node's IP and port
default value is '127.0.0.1:4000,127.0.0.1:4001,127.0.0.1:4002,127.0.0.1:4003'
-n consensus_name name of consensus algorithm
default value is 'tendermint', other is 'raft' and 'poa'
-m crypto_method name of crypto algorithm
default value is 'SECP'
-d block_duration block generating duration(millisecond)
default value is '3000'
-t consensus test flag, only valid for tendermint
-h enable jsonrpc http
default enable 'true'
-w enable jsonrpc websocket
default enable 'true'
-H define jsonrpc HTTP port
default port is '1337'
-W define jsonrpc websocket port
default port is '4337'
-k start with kafka
-Q node id
共识算法参考: https://cryptape.github.io/cita/architecture/consensus/
- 系统管理员账户:(默认值:admin)
- 网络列表,按照
IP1:PORT1,IP2:PORT2,IP3:PORT3 ... IPn:PORTn
的格式 - 共识算法选择,可供选择的有
tendermint
、raft
和poa(默认值:tendermint)
- 加密方法选择(默认值:secp)
- 出块时间间隔(默认值:3000ms)
- 单数据块中交易数量限制(kafka)
- 累积多少历史交易量后进行重复交易的检查
节点初始化操作成功后,将在发布件目录下生成节点的配置文件,其生成的节点目录为:
- node0
- node1
- node2
- node3
可以使用cita start node0
等命令对节点进行启动和停止等操作了。
运行
启动节点的服务步骤都是相同的,以node0
为例,其启动CITA节点的具体步骤为:
链接cita
ln -s /summer/cita-develop/cita/scripts/cita /usr/local/bin/cita //"summer/cita-develop/cita"我自己路径
1) 启动节点node0
之前需进行初始化:
cita setup node0
2) 启动节点node0
的服务:
cita start node0
而停止节点
node0
服务只需执行以下操作:
cita stop node0
此外,
cita
命令中还包括其他操作,具体使用可以查看相关说明:
cita
root@ubuntu:/summer/cita-develop/cita/scripts# cita
usage: /usr/local/bin/cita COMMAND node_dir [args...]
Commands:
setup setup cita run environment
start start cita
stop stop cita
restart restart cita
logrotate logrotate cita
status display cita process status
logs display cita's service(jsonrpc/chain/consensus/network/auth) logs
clean backup and clean cita data&log file
stat display cita's cpu/ram/io/disk information
usage display help information
除了上述的基本操作命令,为了方便用户对Demo进行相关测试,我们在目录
cita/tests/integreate_test
下提供了一些测试脚本。 例如,测试所有节点服务启动并成功出块,然后停止节点服务的操作为:
./cita_start.sh
停止所有节点服务的命令为:
./cita_stop.sh
备注:以上示例Demo的节点启动都是位于同一台机器上,如果需要部署到不同的服务器上,只需删除其他节点的配置("target/install/nodeX"),并保留自己节点的配置,然后将整个目录(即target/install
目录)拷贝到其他服务器上运行即可。
3) 将不同节点部署到不同服务器
节点的服务器需要安装依赖
bash ./scripts/install_runtime.sh
将节点拷贝到对应的服务器,并修改network.toml
目录下的配置文件,修改为对应的IP地址。 使用cita start
启动各个节点。
/summer/cita-develop/cita/target/install/node0/network.toml
id_card = 0
port = 4000
max_peer = 3
[[peers]]
id_card = 1
ip = "127.0.0.1"
port = 4001
[[peers]]
id_card = 2
ip = "127.0.0.1"
port = 4002
[[peers]]
id_card = 3
ip = "127.0.0.1"
port = 4003
/summer/cita-develop/cita/target/install/node1/network.toml
id_card = 1
port = 4001
max_peer = 3
[[peers]]
id_card = 0
ip = "127.0.0.1"
port = 4000
[[peers]]
id_card = 2
ip = "127.0.0.1"
port = 4002
[[peers]]
id_card = 3
ip = "127.0.0.1"
port = 4003
验证 ¶
- 查询节点个数
Request:
curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}' 127.0.0.1:1337 | jq
Result:
{
"jsonrpc": "2.0",
"id": 74,
"result": "0x3"
}
- 查询当前块高度。
Request:
curl -X POST --data '{"jsonrpc":"2.0","method":"cita_blockNumber","params":[],"id":83}' 127.0.0.1:1337 | jq
Result:
{
"jsonrpc": "2.0",
"id": 83,
"result": "0x8"
}
返回块高度,表示节点已经开始正常出块。
更多API(如合约调用、交易查询)请参见RPC调用。