# 安装使用说明

## 部署流程
1. 预知。
2. 配置evmxgo相关。
3. 配置paracross相关。
4. 配置sidecar相关。
5. Q&A

## 预知
1. evmxgo相关概念是与联盟链evmxgo合约，通过jsonrpc完成交互。
2. paracross相关概念是与主链，模拟平行链节点,通过grpc完成交互。
3. 目录结构如下：
```shell
root@ubuntu:~/sidecar# tree
.
├── plugins
│   ├── chain33-client-evmxgo    # 与联盟链evmxgo合约交互的服务插件。
│   ├── chain33-client-paracross # 与主链交互，模拟平行链节点的服务插件。
│   ├── evmxgo                   # evmxgo插件目录。
│   │   └── evmxgo.toml    # 运行evmxgo插件的运行配置文件。
│   └── paracross                # paracross插件目录。
│       └── paracross.toml       # 运行paracross插件的运行配置文件。
├── readme.md                          # 使用文档说明书。
├── sidecar                            # 主程序。
├── sidecar.toml                       # 主程序的运行配置文件。
```
4、主程序命令选项：
```shell
./sidecar -h

NAME:
   Sidecar - Manipulate the crosschain node

USAGE:
   sidecar [global options] command [command options] [arguments...]

VERSION:
   0.0.0

COMMANDS:
   id          Get appchain id
   init        Initialize sidecar local configuration
   interchain  Query interchain info
   p2p         Command about p2p
   tool        generate tool for node
   start       Start a long-running daemon process
   version     Show version about ap
   proposals   proposals manage command
   help, h     Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --repo value   Sidecar repository path
   --tls          enable tls between sidecar and link33 or not
   --help, -h     show help
   --version, -v  print the version
```
## 配置evmxgo相关
### 1. 准备工作
例如：
* 地址（A）：1DXXnGX9w1QG9S2iNTGne1CjPfaiieiHH
* 私钥(PK)：0xb9135831281bb9a09e2610680258270faecbeb4a73e0cec261ef0970c32cca5a
* 联盟链jsonrpc地址

### 2. 授权
* 使用manage合约通过Modify命令，授权给A，使其能够执行evmxgo合约。
```json
{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "Chain33.CreateTransaction",
    "params": [
        {
            "execer": "manage",
            "actionName": "Modify",
            "payload": {
                "key": "evmxgo-mint-map-BTY",
                "value": "{\"address\": \"1DXXnGX9w1QG9S2iNTGne1CjPfaiieiHH\",\"precision\": 8,\"introduction\": \"介绍\"}",
                "op": "add",
                "addr": "1DXXnGX9w1QG9S2iNTGne1CjPfaiieiHH"
            }
        }
    ]
}
```

### 3. 修改`evmxgo` 插件配置文件
修改plugins/evmxgo/evmxgo.toml文件信息，具体见文件。
#### 修改[chain33]片段:
```toml
[chain33]
#用于跨链交易签名的私钥，此私钥对应的地址需要管理员授权
private_key = "0xb9135831281bb9a09e2610680258270faecbeb4a73e0cec261ef0970c32cca5a"
#联盟链的json rpc 服务地址
addr = "http://192.168.0.254:8801"
#起始高度
start_height = 161 #第一次运行时初始化，修改当前联盟链最新高度，以后不要修改！
#高度差
height_diff = 1  #联盟链修改为1，第一次运行时初始化，以后不要修改！
#单笔交易手续费
fee = 100000
#被监听链ID
chain_id = 0 #联盟链chainID
```

## 配置paracross相关
### 1. 准备工作
例如：
* 地址（A）：1DXXnGX9w1QG9S2iNTGne1CjPfaiieiHH
* 私钥(PK)：0xb9135831281bb9a09e2610680258270faecbeb4a73e0cec261ef0970c32cca5a
* 创建平行链Title="user.p.superx."，管理员为PK，或其它。 具体如何创建平行链，可以咨询马老师，或者熟悉之人。
* 主链grpc地址

### 2. 修改`paracross`插件配置文件
修改plugins/paracross/paracross.toml文件信息，具体见文件。
#### 修改[chain33]片段
```toml
#平行链title需要保持唯一，并被注册
Title = "user.p.superx."
#用于跨链交易签名的私钥，模拟平行链节点，发送交易。
private_key = "0xb9135831281bb9a09e2610680258270faecbeb4a73e0cec261ef0970c32cca5a"
#主链的 grpc 服务地址
addr = "192.168.0.254:8802"
#起始高度
start_height = 161 #第一次运行时初始化，修改当前主链最新高度，以后不要修改！
#高度差
height_diff = 6  #主链修改为6，第一次运行时初始化，以后不要修改！
#单笔交易手续费
fee = 100000
#被监听链ID
chain_id = 0 #主链chainID
```

## 配置sidecar相关。

### 1. 初始化`sidecar`环境
/root/sidecar/sidecar --repo /root/sidecar/ init

### 2. 修改`sidecar`运行配置文件
####  删除所有[[appchains]]信息，再追加以下信息：
```toml
[[appchains]]
enable = true
type = "appchain"
did = "paracross"
config = "paracross/paracross.toml"
plugin = "chain33-client-paracross"
plugin_id = "paracross"

[[appchains]]
enable = true
type = "appchain"
did = "evmxgo"
config = "evmxgo/evmxgo.toml"
plugin = "chain33-client-evmxgo"
plugin_id = "evmxgo"
```

####  修改[peer]信息片段:
```toml
[peer]
peers = ["****"] # 保留第一项，后几项删除
providers = 1
```

### 3. 运行程序：测试是否配置正确。
/root/sidecar/sidecar --repo /root/sidecar/ start

### 4. 系统守护模式运行
```shell
vim /lib/systemd/system/sidecar.service
```
```shell

[Unit]
Description=sidecar Service
After=network.target

[Service]
Type=simple
WorkingDirectory=/root/sidecar
Restart=on-failure
RestartSec=5s
ExecStart=/root/sidecar/sidecar --repo /root/sidecar/ start
ExecReload=/root/sidecar/sidecar --repo /root/sidecar/ start
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

```

### 5. 启动服务
```shell
systemctl enable sidecar

systemctl restart sidecar

systemctl status sidecar

```

## Q&A
### 问题
* 缺少libwasmer.so https://github.com/wasmerio/wasmer/blob/master/lib/c-api/README.md
  mv libwasmer.so  /usr/local/lib/libwasmer.so
### 备注：
* evmxgo.toml与paracross.toml中的private_key，可以不用保持一至，但要有对应权限。

