跳转至

验证规则管理

中继链提供对应用链验证规则进行管理的功能。

1 概述

验证规则是应用链在中继链上自主部署的智能合约,应用链可以有多条验证规则,但只能有一个主验证规则,中继链的验证引擎会根据主验证规则验证应用链跨链请求的真伪。

中继链的验证规则管理主要包含 验证规则注册主验证规则切换验证规则注销

2 验证规则注册

2.1 功能介绍

首次验证规则的注册和应用链注册(命令详见应用链管理-中继链模式管理文档)同时进行,即注册应用链时需要携带主验证规则信息,系统会将主规则注册绑定为该应用链的主验证规则,同时自动为该应用链注册所有默认规则。

关于 默认验证规则,目前我们提供如下三种默认验证规则(括号内为默认验证规则地址):

  • 无验证规则(0x00000000000000000000000000000000000000a2):为所有类型应用链提供,该规则相当于验证引擎不对跨链请求进行验证
  • fabric简单规则(0x00000000000000000000000000000000000000a1):仅为Fabric V1.4.3Fabric V1.4.4类型的应用链提供,该规则使用简单逻辑验证fabric链的跨链请求
  • fabric复杂规则(0x00000000000000000000000000000000000000a0):仅为Fabric V1.4.3Fabric V1.4.4类型的应用链提供,该规则使用复杂逻辑验证fabric链的跨链请求

应用链注册成功后,应用链管理员可以继续为应用链注册其他规则,但中继链只是记录新规则,不会改变应用链的主验证规则。

2.2 使用方法

第一步:应用链部署验证规则

pier rule deploy

参数解释:

  • --repo:可选参数,指定pier配置文件所在目录,如果不指定,默认使用$HOME/.pier目录
  • --path:指定验证规则文件所在路径

第二步:注册验证规则

pier rule register

参数解释:

  • --repo:可选参数,指定pier配置文件所在目录,如果不指定,默认使用$HOME/.pier目录
  • --appchain-id:指定应用链id
  • --rule:指定验证规则地址
  • --rule-url:指定验证规则内容url地址,该url可供用户查看规则内容,系统不作检查,以下示例中以任意网址代替

2.3 示例说明

前提条件:

  • bitxhub已经启动,使用默认ZeroPermission投票策略
  • pier配置文件已准备好,对应一个Fabric V1.4.3类型应用链
  • pier配置文件下的key.json对应中继链上一个有足够交易费余额的账户
# 部署验证规则
$ pier --repo $pier_repo rule deploy --path $pier_repo/fabric/validating.wasm
Deploy rule successfully: 0x615bAa02f2751f3378c8c57F9eB084daD6A55a92

# 注册应用链
$ pier --repo $pier_repo appchain register --appchain-id appchain1 --name 应用链A --type "Fabric V1.4.3" --trustroot $pier_repo/fabric/fabric.validators --broker-cid "mychannel" --broker-ccid "broker" --broker-v 1 --desc "test fabric"  --master-rule 0x615bAa02f2751f3378c8c57F9eB084daD6A55a92 --rule-url "https://bitxhub.cn/" --admin 0x89cc4e498e073fe3A54524239226187f9Dc6414d
Register appchain successfully, wait for proposal 0x89cc4e498e073fe3A54524239226187f9Dc6414d-0 to finish.
# ZeroPermission策略下管理员投票可省略,即已注册成功

# 查询应用链验证规则:指定的主规则已绑定,类型默认规则自动注册为可绑定状态
$ bitxhub --repo $bitxhub_node_repo client governance rule all --id appchain1
ChainID    RuleAddress                                 Status     Master  CreateTime
-------    -----------                                 ------     ------  ----------
appchain1  0x00000000000000000000000000000000000000a2  bindable   false   1644992225287923000
appchain1  0x00000000000000000000000000000000000000a0  bindable   false   1644992225287923000
appchain1  0x00000000000000000000000000000000000000a1  bindable   false   1644992225287923000
appchain1  0x615bAa02f2751f3378c8c57F9eB084daD6A55a92  available  true    1644992225287923000

# 部署新的验证规则
$ pier --repo $pier_repo rule deploy --path $pier_repo/fabric/validating.wasm
Deploy rule successfully: 0x075214660D7021c071259Cc9dd69835A04491AC8

# 注册新的验证规则
$ pier --repo $pier_repo rule register --appchain-id appchain1 --rule 0x075214660D7021c071259Cc9dd69835A04491AC8 --rule-url "https://bitxhub.cn/"
Register rule to bitxhub for appchain appchain1 successfully.

# 查询应用链验证规则
$ bitxhub --repo $bitxhub_node_repo client governance rule all --id appchain1
ChainID    RuleAddress                                 Status     Master  CreateTime
-------    -----------                                 ------     ------  ----------
appchain1  0x00000000000000000000000000000000000000a2  bindable   false   1644992225287923000
appchain1  0x00000000000000000000000000000000000000a0  bindable   false   1644992225287923000
appchain1  0x00000000000000000000000000000000000000a1  bindable   false   1644992225287923000
appchain1  0x615bAa02f2751f3378c8c57F9eB084daD6A55a92  available  true    1644992225287923000
appchain1  0x075214660D7021c071259Cc9dd69835A04491AC8  bindable   false   1644992395141307000

3 主验证规则切换

3.1 功能介绍

中继链上可能部署注册了应用链的多条验证规则(但只有一条主验证规则),应用链如果想更换主验证规则,可以使用主验证规则切换功能。
切换主验证规则过程涉及到新旧两条主验证规则,新验证规则在切换之前必须是可绑定状态,切换过程中新旧主验证规则的状态转换如下:

  • 新的主验证规则:bindablebindingavailable
  • 旧的主验证规则:availableunbindingbindable

(注意,如果使用ZeroPermission投票策略,无法明显看到规则绑定或解绑的过渡状态)

3.2 使用方法

pier rule update

参数解释:

  • --repo:可选参数,指定pier配置文件所在目录,如果不指定,默认使用$HOME/.pier目录
  • --addr:指定新的主验证规则地址
  • --appchain-id:指定应用链id
  • --reason:可选参数,说明切换原因

(注意,验证规则切换需要投票治理流程,如果使用ZeroPermission投票策略,投票过程可省略)

3.3 示例说明

前提条件:

  • 接上文中2.3示例
    # 查询应用链验证规则:主规则为 0x615bAa02f2751f3378c8c57F9eB084daD6A55a92
    $ bitxhub --repo $bitxhub_node_repo client governance rule all --id appchain1
    ChainID    RuleAddress                                 Status     Master  CreateTime
    -------    -----------                                 ------     ------  ----------
    appchain1  0x00000000000000000000000000000000000000a2  bindable   false   1644992225287923000
    appchain1  0x00000000000000000000000000000000000000a0  bindable   false   1644992225287923000
    appchain1  0x00000000000000000000000000000000000000a1  bindable   false   1644992225287923000
    appchain1  0x615bAa02f2751f3378c8c57F9eB084daD6A55a92  available  true    1644992225287923000
    appchain1  0x075214660D7021c071259Cc9dd69835A04491AC8  bindable   false   1644992395141307000
    
    # 切换验证规则
    $ pier --repo $pier_repo rule update --addr 0x075214660D7021c071259Cc9dd69835A04491AC8 --appchain-id appchain1
    Update master rule to bitxhub for appchain appchain1 successfully, wait for proposal 0x89cc4e498e073fe3A54524239226187f9Dc6414d-1 to finish.
    # ZeroPermission策略下管理员投票可省略,即已切换成功
    
    # 查询应用链验证规则:主规则为 0x075214660D7021c071259Cc9dd69835A04491AC8
    $ bitxhub --repo $bitxhub_node_repo client governance rule all --id appchain1
    ChainID    RuleAddress                                 Status     Master  CreateTime
    -------    -----------                                 ------     ------  ----------
    appchain1  0x00000000000000000000000000000000000000a2  bindable   false   1644992225287923000
    appchain1  0x00000000000000000000000000000000000000a0  bindable   false   1644992225287923000
    appchain1  0x00000000000000000000000000000000000000a1  bindable   false   1644992225287923000
    appchain1  0x615bAa02f2751f3378c8c57F9eB084daD6A55a92  bindable   false   1644992225287923000
    appchain1  0x075214660D7021c071259Cc9dd69835A04491AC8  available  true    1644992395141307000
    

4 验证规则注销

4.1 功能介绍

应用链可以注销已经注册过的验证规则,但为保证应用链始终有一条可用的验证规则,主验证规则无法注销。
注销过程中验证规则的状态转换如下:
bindableforbidden

4.2 使用方法

pier rule logout

参数解释:

  • --repo:可选参数,指定pier配置文件所在目录,如果不指定,默认使用$HOME/.pier目录
  • --addr:指定新的主验证规则地址
  • --appchain-id:指定应用链id

4.3 示例说明

前提条件

  • 接上文中3.3示例
# 查询应用链验证规则:主规则为 0x075214660D7021c071259Cc9dd69835A04491AC8,有4条可绑定规则
$ bitxhub --repo $bitxhub_node_repo client governance rule all --id appchain1
ChainID    RuleAddress                                 Status     Master  CreateTime
-------    -----------                                 ------     ------  ----------
appchain1  0x00000000000000000000000000000000000000a2  bindable   false   1644992225287923000
appchain1  0x00000000000000000000000000000000000000a0  bindable   false   1644992225287923000
appchain1  0x00000000000000000000000000000000000000a1  bindable   false   1644992225287923000
appchain1  0x615bAa02f2751f3378c8c57F9eB084daD6A55a92  bindable   false   1644992225287923000
appchain1  0x075214660D7021c071259Cc9dd69835A04491AC8  available  true    1644992395141307000

# 注销验证规则
$ pier --repo $pier_repo rule logout --addr 0x615bAa02f2751f3378c8c57F9eB084daD6A55a92 --appchain-id appchain1
The logout request was submitted successfully

# 查询应用链验证规则:主规则为 0x075214660D7021c071259Cc9dd69835A04491AC8,有3条可绑定规则
$ bitxhub --repo $bitxhub_node_repo client governance rule all --id appchain1
ChainID    RuleAddress                                 Status     Master  CreateTime
-------    -----------                                 ------     ------  ----------
appchain1  0x00000000000000000000000000000000000000a2  bindable   false   1644992225287923000
appchain1  0x00000000000000000000000000000000000000a0  bindable   false   1644992225287923000
appchain1  0x00000000000000000000000000000000000000a1  bindable   false   1644992225287923000
appchain1  0x615bAa02f2751f3378c8c57F9eB084daD6A55a92  forbidden  false   1644992225287923000
appchain1  0x075214660D7021c071259Cc9dd69835A04491AC8  available  true    1644992395141307000

5 其他功能

中继链还提供了其他查询验证规则信息的功能
以下给出的示例说明的前提条件均为接上文4.3示例

5.1 查询应用链所有规则

示例说明: ```shell script $ bitxhub --repo $bitxhub_node_repo client governance rule all --id appchain1 ChainID RuleAddress Status Master CreateTime ------- ----------- ------ ------ ---------- appchain1 0x00000000000000000000000000000000000000a2 bindable false 1644992225287923000 appchain1 0x00000000000000000000000000000000000000a0 bindable false 1644992225287923000 appchain1 0x00000000000000000000000000000000000000a1 bindable false 1644992225287923000 appchain1 0x615bAa02f2751f3378c8c57F9eB084daD6A55a92 forbidden false 1644992225287923000 appchain1 0x075214660D7021c071259Cc9dd69835A04491AC8 available true 1644992395141307000

### 5.2 查询应用链主验证规则
示例说明:
```shell script
$ bitxhub --repo $bitxhub_node_repo client governance rule master --id appchain1
available rule address is 0x075214660D7021c071259Cc9dd69835A04491AC8

5.3 查询应用链某条验证规则状态

示例说明: shell script $ bitxhub --repo $bitxhub_node_repo client governance rule status --id appchain1 --addr 0x075214660D7021c071259Cc9dd69835A04491AC8 the rule 0x075214660D7021c071259Cc9dd69835A04491AC8 is available

回到页面顶部