比特帝国

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

比特股合规设计功能 ---“白名单”使用教程

2016-9-10 10:21| 发布者: admin| 查看: 1805| 评论: 0|原作者: abit

【概述】

资产设好了白名单后,不在名单内的账号,将不能对该资产进行转账(包括转入转出)、交易(包括买入卖出),不能使用该资产支付系统手续费。至于已经启动的分期付款是否可以继续执行,或者发行人可否强制收回该账户拥有的资产,或者其他高级功能,有待测试。

这个功能用于满足资产发行的合规要求。

另外系统还支持黑名单功能,但本教程里不包含黑名单的具体介绍。


【教程内容】

假设你有一个资产 NEWASSET ,要设置白名单。 

1,通过命令行获取资产的详细属性设置

命令格式:
get_asset [资产代码]

示例:
unlocked >>> get_asset NEWASSET
get_asset NEWASSET
{
  "id": "1.3.123",
  "symbol": "NEWASSET",
  "precision": 4,
  "issuer": "1.2.695",
  "options": {
    "max_supply": "1000000000000",
    "market_fee_percent": 0,
    "max_market_fee": 0,
    "issuer_permissions": 79,
    "flags": 2,
    "core_exchange_rate": {
      "base": {
        "amount": 100000,
        "asset_id": "1.3.0"
      },
      "quote": {
        "amount": 10000,
        "asset_id": "1.3.123"
      }
    },
    "whitelist_authorities": [],
    "blacklist_authorities": [],
    "whitelist_markets": [],
    "blacklist_markets": [],
    "description": "{\"main\":\"\",\"market\":\"TEST\"}",
    "extensions": []
  },
  "dynamic_asset_data_id": "2.3.123"
}
在上述结果中, 

"issuer_permissions": 79 表示该资产的白名单启用状态是否可以修改。
实际上, issuer_permissions 是资产多个权限参数的集合,将 issuer_permissions 转为二进制,从右边数第 2 位表示白名单,如果是 1 则为可修改,是 0 则为不可修改。

"flags": 2 表示已经启用了白名单。
实际上,flags是资产多个旗标参数的集合,将 flags 转为二进制,从右边数第 2 位表示白名单,如果是 1 则为开启,是 0 则为关闭。

"whitelist_authorities": [] 表示没有设置具体名单,这时,白名单功能不生效(结果可测试)。
实际上, whitelist_authorities 里设置的是“白名单管理员”名单,而不是白名单本身。这样的设计很灵活,可以指定多个管理员,修改名单不一定要使用发行者账号,不需要频繁修改资产参数。


2,开启白名单功能

 1) 可以在GUI里修改资产的“旗标”设置开启白名单。
    不过需要注意,如果在命令行设置过资产参数,则不要在 GUI 进行操作,以免导致问题。

 2) 通过命令行开启或关闭资产白名单
    先将 flags 二进制里相应位置修改为1或0,然后转为十进制,执行 upate_asset 命令。可以和下面步骤合并,具体在下面会介绍。


3,将管理员账号加入白名单管理员名单

比如,你要将 newaccount1 设置为 NEWASSET 的白名单管理员。

3.1 首先要知道 newaccount1 的 ID,这个 ID 可以通过GUI的浏览账号功能或者命令行 get_account 命令取到。
命令格式:
get_account [账户名]

示例:
unlocked >>> get_account newaccount1
get_account newaccount1
{
  "id": "1.2.695",
  ...
}
上面结果显示, newaccount1 的 ID 是 1.2.695

3.2 然后,将上述 get_asset 命令获取的结果中 "options" 后的花括号里面的内容合成一行,再将 "1.2.695" 加入到 whitelist_authorities 后面的方括号中,比如(包含方括号) ["1.2.695"],执行 update_asset 命令。如果有多个管理员,则一起放入方括号中,使用逗号分隔,比如 ["1.2.695","1.2.696"] 。
命令格式:
update_asset [资产代码] [新发行人] [新资产参数] [是否广播]

示例:
update_asset NEWASSET null {"max_supply":"1000000000000","market_fee_percent": 0,"max_market_fee": 0,"issuer_permissions": 79,"flags": 2,"core_exchange_rate": {"base": {"amount": 100000,"asset_id":"1.3.0" },"quote": {"amount": 10000,"asset_id":"1.3.123" } },"whitelist_authorities": ["1.2.695"],"blacklist_authorities": [],"whitelist_markets": [],"blacklist_markets": [],"description":"{\"main\":\"\",\"market\":\"TEST\"}","extensions": []} true

其中,
第 1 个参数 NEWASSET 是资产代码;
第 2 个参数 null 表示不修改资产发行人(如果要把资产转给名叫 null 的账户,请使用引号,比如 "null")
第 3 个参数,花括号 {} 里是新的资产参数, 由前面得到的 options 加入一个管理员账号后得出。如果同时需要启用白名单,则修改 flags 后面的数值。
第 4 个参数 true 表示执行,如果填 false 表示对命令格式进行测试,不会执行

命令执行完成后,可以使用 get_asset 命令重新查看资产白名单管理员是否已经设好

注意:
 1) update_asset 命令的第 3 个参数会将资产的所有属性设置完全覆盖,所以务必仔细检查,使用完整数据。
    比如要删掉某个管理员,必须在参数中指定所有其他管理员。
 2) 使用命令行设置后,不要再用 GUI 来修改资产属性,因为 GUI 目前不支持白名单设置,通过 GUI 操作可能导致数据丢失 


4. 管理员管理白名单

现在管理员 newaccount1 可以管理资产 NEWASSET 的白名单了。默认名单是空,也就是说现在没人可以对该资产进行转账、交易等操作(可测试)。

4.1 查询白名单
这里有个问题:我使用的命令行有个 BUG ,导致不显示管理员设置的具体名单。如果 BUG 修复,可以使用 get_account 命令查看当前设置的白名单。
示例:
unlocked >>> get_account newaccount1
get_account newaccount1
{
  ...
  "whitelisting_accounts": [],
  "blacklisting_accounts": [],
  "whitelisted_accounts": [],
  "blacklisted_accounts": [],
  ...
}
其中 whitelisted_accounts 就是当前管理员设置的白名单。
另外 whitelisting_accounts 表示有哪个人把当前账号加入了他自己的白名单。

4.2 修改白名单
使用 whitelist_account 命令可以将账号加入白名单,或者从白名单移除。
命令格式:
whitelist_account [操作人账号] [操作对象账号] [增加或删除] [是否广播]

示例1(加入白名单):
unlocked >>> whitelist_account newaccount1 newaccount2 true false

上述命令是将 newaccount2 加入 newaccount1 的白名单,需要 newaccount1 的权限才能执行。
执行完成后,使用 get_account 命令查看是否生效:
unlocked >>> get_account newaccount2
get_account newaccount2
{
  ...
  "whitelisting_accounts": [
    "1.2.695"
  ],
  "blacklisting_accounts": [],
  "whitelisted_accounts": [],
  "blacklisted_accounts": [],
  ...
}
可以看到, newaccount2 已经在 1.2.695 也就是 newaccount1 的白名单里了。因为 newaccount1 是 NEWASSET 资产的白名单管理员,这时 newaccount2 可以正常使用 NEWASSET 资产。

注意:
当资产设置了白名单管理人后,管理员、甚至发行人自己,如果需要使用该资产,也需要先加入白名单。

示例2(从白名单移除):
unlocked >>> whitelist_account newaccount1 newaccount2 false false
上述命令是将 newaccount2 从 newaccount1 的白名单移除,需要 newaccount1 的权限才能执行。
用户从白名单移除后,即使持有资产,也不能转出或者卖出。

原作者:abit
原文链接:https://bitsharestalk.org/index.php?topic=23298.0
比特帝国区块链交易所

最新评论

返回顶部