XuperChain 监管合约机制使用说明

监管合约机制说明

XuperChain是一个具备政府监管能力的区块链系统。在设计上我们需要充分考虑监管和安全问题,做到安全可控。基于此我们超级链底层设计了一个Reserved Contracts的机制,通过该机制,超级链具备了对链上用户的实名、交易的安全检查等能力。

XuperChain链在初始化时候,可以通过创世块配置的方式,配置这条链是否需要支持监管。对于配置了监管合约的链,这个链上所有的事务发起,无论是转账还是合约调用,系统会默认插入监管合约的执行,执行结果体现在读写集中,执行过程不消耗用户资源,执行结果所有节点可验证。

目前XuperChain支持的监管合约主要有以下几个:

  • 实名制合约: identity
  • DApp封禁合约: banned
  • 合规性检查合约: complianceCheck
  • 交易封禁合约: forbidden

下面将会以实名合约为例对监管合约的使用步骤进行说明

使用步骤

step1: 创世块配置

创世块配置新增reserved_contracts 配置,内容如下:

  1. "reserved_contracts": [
  2. {
  3. "module_name": "wasm",
  4. "contract_name": "identity",
  5. "method_name": "verify",
  6. "args":{}
  7. }
  8. ]

这个配置中配置了identity 监管合约。

step2: 搭建网络

搭建网络的方式与以前的方式没有区别,用户可以依据需求选择搭建单节点网络还是多节点网络。

搭建网络参见如下链接:单节点网络搭建多节点网络搭建

step3: 部署Reserved合约

  • 编译实名合约实名合约代码路径如下:实名合约实名合约实名的对象是一个具体的ak。

    1. cd ./contractsdk/cpp
    2. cp reserved/identity.cc example
    3. ./build.sh

    编译好的产出为 ./build 文件夹下的identity.wasm文件。

  • 创建合约账户在XuperChain中所有的合约都是部署在具体的某个账户下的,所以,为了部署实名合约,我们需要首先创建一个合约账户,注意,这里账户的拥有者可以修改其内合约Method的ACL权限管理策略,通过这种机制实现对谁可以添加实名状态和删除实名状态的控制。这里是由XuperChain的账户权限系统支持的。

  1. 快速创建合约方式:
  2. ./xchain-cli account new --account 1111111111111111
  • 部署实名合约部署合约需要消耗资源,所以先给上述合约账户转移一笔资源,然后在合约内部署上面的合约:
    1. // 1 转移资源
    2. ./xchain-cli transfer --to XC1111111111111111@xuper --amount 100000
    3. // 2 部署实名合约
    4. // 通过 -a 的creator参数,可以初始化被实名的ak。
    5. ./xchain-cli wasm deploy --account XC1111111111111111@xuper --cname identity -H localhost:37101 identity.wasm -a '{"creator":"addr1"}'

    注意: 上述实名合约初始化的被实名的address需要和实名合约添加实名信息保持相同,否则会由于初始实名的ak和添加实名权控不一致而导致系统无法添加新的实名状态。

step4: Reserved合约调用

实名合约部署完成后,就可以进行实名合约信息的添加和删除了

  • 添加实名信息

合约调用json文件如下:

  1. {
  2. "module_name": "wasm",
  3. "contract_name": "identity",
  4. "method_name": "register_aks",
  5. "args":{
  6. "aks":"ak1,ak2"
  7. }
  8. }

具体步骤如下:

  1. // 1: 生成原始交易
  2. ./xchain-cli multisig gen --desc identity_add.json --host localhost:37101 --fee 1000 --output tx_add.out
  3. // 2: 本地签名
  4. ./xchain-cli multisig sign --output tx_add_my.sign --tx tx_add.out
  5. // 3: 交易发送
  6. ./xchain-cli multisig send tx_add_my.sign --host localhost:37101 --tx tx_add.out
  • 删除实名信息

合约调用json文件如下:

  1. {
  2. "module_name": "wasm",
  3. "contract_name": "identity",
  4. "method_name": "unregister_aks",
  5. "args":{
  6. "aks":"ak1,ak2"
  7. }
  8. }

具体步骤如下:

  1. // 1: 生成原始交易
  2. ./xchain-cli multisig gen --desc identity_del.json --host localhost:37101 --fee 1000 --output tx_del.out
  3. // 2: 本地签名
  4. ./xchain-cli multisig sign --output tx_del_my.sign --tx tx_del.out
  5. // 3: 交易发送
  6. ./xchain-cli multisig send tx_del_my.sign tx_del_compliance_sign.out --host localhost:37101 --tx tx_del.out
  • 实名信息验证

当用户向网络发起事务请求时,网络会验证交易中的 initiatorauth_require 字段是否都经过实名,如果都经过实名,则通过,否则,失败。