Author Topic: 【教程】使用资产白名单功能  (Read 3643 times)

0 Members and 1 Guest are viewing this topic.

Offline Musewhale

  • Hero Member
  • *****
  • Posts: 2881
  • 丑,实在是太丑了 !
    • View Profile
MUSE witness:mygoodfriend     vote for me

Offline wuxuqiang

  • Sr. Member
  • ****
  • Posts: 377
    • View Profile
    • 比特股中文网
  • BitShares: web1024
 +5% +5% +5%
太棒了,转到比特股中文网高级教程里了http://btsabc.org/article-784-1.html
我是"比特股中文网"站长:吴序强  欢迎光临我们大家的网站:http://www.BtsABC.org   比特股网页钱包(帝国版):https://bit.btsabc.org

Offline ripplexiaoshan

  • Moderator
  • Hero Member
  • *****
  • Posts: 2300
    • View Profile
  • BitShares: jademont
赞! 白名单可以用于管理会员。非白名单内的人不得持有资产。
BTS committee member:jademont

Offline abit

  • Committee member
  • Hero Member
  • *
  • Posts: 4664
    • View Profile
    • Abit's Hive Blog
  • BitShares: abit
  • GitHub: abitmore
【概述】

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

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

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


【教程内容】

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

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

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

示例:
Code: [Select]
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 命令取到。命令格式:
Code: [Select]
get_account [账户名]

示例:
Code: [Select]
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"] 。
命令格式:
Code: [Select]
update_asset [资产代码] [新发行人] [新资产参数] [是否广播]

示例:
Code: [Select]
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 命令查看当前设置的白名单。

示例:
Code: [Select]
unlocked >>> get_account newaccount1
get_account newaccount1
{
  ...
  "whitelisting_accounts": [],
  "blacklisting_accounts": [],
  "whitelisted_accounts": [],
  "blacklisted_accounts": [],
  ...
}
其中 whitelisted_accounts 就是当前管理员设置的白名单。
另外 whitelisting_accounts 表示有哪个人把当前账号加入了他自己的白名单。

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

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

上述命令是将 newaccount2 加入 newaccount1 的白名单,需要 newaccount1 的权限才能执行。
执行完成后,使用 get_account 命令查看是否生效:

Code: [Select]
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(从白名单移除):
Code: [Select]
unlocked >>> whitelist_account newaccount1 newaccount2 false false
上述命令是将 newaccount2 从 newaccount1 的白名单移除,需要 newaccount1 的权限才能执行。
用户从白名单移除后,即使持有资产,也不能转出或者卖出。

BitShares committee member: abit
BitShares witness: in.abit