安装说明
========

--------------

依赖环境的安装
--------------

1.安装Java1.8环境。

例如，在Ubuntu下使用apt-get进行安装：

.. code:: bash

   apt-get install openjdk-8-jre

在Centos环境下，使用yum进行安装：

.. code:: bash

   yum install java-1.8.0-openjdk

如果是离线环境，可先下载openjdk的安装包后进行离线安装。

Ubuntu下

.. code:: bash

   dpkg -i jdk-8uxxxxx.deb

在Centos环境下，使用yum进行离线安装：

.. code:: bash

   yum localinstall jdk-8u271-linux-xxx.rpm

2.安装wget与unzip。 例如，在Ubuntu下使用apt-get进行安装：

.. code:: bash

   apt-get install unzip
   apt-get install wget

--------------

网络拓扑说明
------------

部署数瑞智能合约引擎最小仅需一个节点，此时可用作调试、测试，不能通过多节点模式来实现可信的计算。
单节点部署时，可通过配置账本实现“防抵赖”的计算，但不能实现“难篡改”的计算。

多节点部署时可参考下图，包含三种逻辑节点，同一虚拟机可安装一至三种节点。

1）账本节点。即数瑞图式账本。

2）合约节点。运行代码逻辑，并通过内存缓存实现高响应的模块。与其他合约节点组成可信计算网络。

3）路由节点。各个合约节点的路由信息。一般单个路由节点可支持最高1000合约节点。可视情况部署多个路由节点，并在路由节点之间配置实现更大规模的节点组网。

一般地，同一虚拟机下，会部署\ **合约节点与账本节点**\ 。

.. figure:: _static/imgs/deploytopology.png
   :alt: deploytopology

   deploytopology

--------------

智能合约节点安装
----------------

打开\ `安装包下载链接 <https://public.internetapi.cn/?dir=releases/bdcontract/newest>`__
其中，下载\ ``bdserver-lite.zip``\ 或\ ``bdserver.zip``\ ，其中，\ ``bdserver.zip``\ 包含更多示例和文档。
下载之后解压并启动。

.. code:: bash

   unzip -d ./bdserver bdserver-lite.zip
   cd bdserver
   chmod +x *.sh
   sh cmstart.sh

--------------

路由准入节点安装
----------------

打开\ `安装包下载链接 <https://public.internetapi.cn/?dir=releases/bdcontract/newest>`__
其中，下载\ ``bdserver-cluster.zip``\ 。 下载之后解压并启动。

.. code:: bash

   unzip -d ./bdcluster bdserver-cluster.zip
   cd bdcluster
   chmod +x *.sh
   sh ncstart.sh

--------------

文件说明
--------

智能合约节点
~~~~~~~~~~~~

.. figure:: _static/imgs/dirstructure.png
   :alt: bdserver目录

   bdserver目录

该目录下的文件说明：

1.cmstart.sh
该脚本用于启动合约引擎。合约引擎默认监听8080端口，可通过修改cmstart.sh来修改合约引擎的监听端口。

2.BDWareProjectDir 该目录存放了本节点的所有合约项目。

3.WebContent 该目录存放了本节点的前端代码。

4.cp, 该目录存放了yjs.jar，为启动合约实例所需的jar。

5.bdserver.jar 对外提供http/websocket的服务器逻辑。

6.updateContract.sh 用于升级的脚本。

路由准入节点
~~~~~~~~~~~~

安装脚本会自动下载安装并解压为bdcluster目录。 该目录下的文件说明：

1.ncstart.sh
该脚本用于启动节点准入中心。默认监听1718端口。可通过修改ncstart.sh来修改监听的端口。

2.WebContent 该目录存放了准入中心的前端代码。

3.bdcluster.jar 准入中心的后端。

--------------

升级流程
--------

合约节点
~~~~~~~~

在命令行中输入：

.. code:: bash

   sh updateContract.sh

亦可通过\ `public.internetapi.cn <https://public.internetapi.cn/?dir=releases/bdcontract>`__\ ，下载最新文件，单独升级yjs.zip/bdserver-jar.zip/AgentWebContent来升级。

.. _路由准入节点-1:

路由准入节点
~~~~~~~~~~~~

.. code:: bash

   sh updateCluster.sh

亦可通过\ `public.internetapi.cn <https://public.internetapi.cn/?dir=releases/bdcontract>`__\ ，下载最新文件，单独升级bdserver-cluster.zip/ClusterWebContent.zip来升级。

--------------

使用说明
--------

通过参考界面使用
~~~~~~~~~~~~~~~~

当保留了WebContent目录的情况下，可使用浏览器进行配置。
更多请使用见左侧文档\ `BDContract参考界面使用说明 <./IDEUsage.html>`__\ 。

BDWare OnlineIDE
^^^^^^^^^^^^^^^^

打开\ `BDWare OnlineIDE <../OnlineIDE.html>`__\ 。

BDWare NodePortal
^^^^^^^^^^^^^^^^^

打开\ `BDWare NodePortal <../NodePortal.html>`__\ 。

如需组网，使用跨节点功能，则需安装路由准入中心。并按以下步骤进行配置。涉及两组公私钥。
第一组公私钥为合约节点的、有NodeManager权限的公私钥。
第二组公私钥为路由准入节点的、有CenterManager权限的公私钥。

1.打开NodePortal.html，复制该节点的NodeManager公私钥。

2.打开CenterPortal.html，点击右上角，将上述的NodeManager公私钥导入；并选择“NodeManager”进行身份认证。

3.在CenterPortal.html中切换CenterManager的公私钥，点左侧的“用户管理”，通过NodeManager的认证请求。

4.使用NodeManager权限的公私钥打开NodePortal.html，点击：“节点管理”菜单，并配置加入网络。
其中，加入网络的格式为:ws://centerportal的ip:端口+1。 |配置示例|

通过SDK使用
~~~~~~~~~~~

基础知识
^^^^^^^^

`Websocket <https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API>`__

`Sm2加密的使用 <https://github.com/JuneAndGreen/sm-crypto>`__

SDK下载
^^^^^^^

1. Java版本的客户端下载：\ `BDWareJavaClient <_static/BDWareJavaClient.zip>`__\ 。具体使用说明请下载后解压，查看README.md，并参考\ `ContractAPI <./ContractAPI.html>`__\ 。

2.Javascript版本的客户端下载:\ `BDWareWebClient <_static/BDWareWebClient.zip>`__\ 。具体使用说明请下载后解压，查看README.md，并参考\ `ContractAPI <./ContractAPI.html>`__\ 。

3.配置工具\ `BDWareConfigTool <_static/BDWareConfigTool.zip>`__\ 。具体说明请下载后解压，使用以下命令查看帮助：

.. code:: bash

   java -jar java-client.jar -h

.. |配置示例| image:: _static/imgs/config.png

