ZooBC 维基
代币与市场

发行代币

任何账户都可以用一笔 IssueToken 交易在 ZooBC 上创建自己的代币。无需编写合约,也无需征得任何人同意:交易是否有效由链上固定的规则决定,一旦某个区块打包了它,代币即告存在,发行方持有其全部供应量。此后,代币的单位通过 TransferToken 转移,可以存放在托管、流式支付、定时转账和兑换报价中;若有 8 位小数,还可以用于市场上的订单。

IssueToken 交易

一张 IssueToken 表单及其字段(符号、名称、0 到 8 位小数、供应量、可选的 ZBC 储备,以及“可增发”和“可赎回”两个开关),发行方的钱包持有全部供应量
一张 IssueToken 表单及其字段(符号、名称、0 到 8 位小数、供应量、可选的 ZBC 储备,以及“可增发”和“可赎回”两个开关),发行方的钱包持有全部供应量

IssueToken(类型 10)指定:

字段规则
小数位数0 到 8(见 小数位数与步长)
标志可赎回,以及增发模式(见下文)
总供应量大于 0,且为代币步长的整数倍
ZBC 储备0 或更多
符号2 到 10 个字符(见下文)
名称1 到 64 字节(见下文)
续存付款可选(见 代币维护费(存续))

标志由若干位组成。第 0 位使代币可赎回。第 1 位和第 2 位设定增发模式:0 表示固定供应量,1 表示可增发代币;值 2 和 3 会被拒绝。第 3 位“unbacked”(无储备)会被存储和报告,但没有任何规则读取它。这两个开关各自允许做什么,见 铸造与销毁代币。

由账户组成员发行的代币属于该组。

储备

储备是发行方注入代币的真实 ZBC。这些 ZBC 离开发行方的余额,由代币本身持有,不在任何人的账户中;发行方并未持有的储备会被节点拒绝。这些 ZBC 只能通过三种方式重新流出:

  • 流向销毁可赎回代币单位的持有者;
  • 作为以该代币支付手续费时释放的 ZBC(见下文);
  • 在代币到期时流向持有者(见 代币维护费(存续))。

代币 id

用户代币的 id 是其 IssueToken 交易哈希的前 8 个字节,按小端序有符号 64 位整数读取(如果该数为 0,则取 1)。因此,它就是发行交易自身的 id(见 签署交易)。交易一经签名,id 即已确定,节点之间永远不需要就某个计数器达成一致。API 以有符号十进制字符串输出 id,因此 id 可能为负数。

符号并不唯一:两种仍然有效的代币可以使用同一个符号,任何人都可以复制一个既未被保留也未被禁止的符号。钱包和应用应当显示并检查 id,而不只是符号(见 链上数据是不可信的输入)。

符号和名称的规则

符号有 2 到 10 个字符,每个字符都是 A 到 Z 的大写字母或 0 到 9 的数字。这就排除了小写字母,以及来自其他字母表的形近字母。另有两条规则保护知名名称:

  • 保留:以 Z 开头或结尾的 4 或 5 个字符的符号,例如 ZBTC 或 BTCZ,属于跨链桥的命名空间。像 ZABCDE 这样的 6 个字符的符号是允许的。
  • 禁止:一份内置清单列出了任何人都不得冒充的 78 个知名代号:17 种货币(例如 USD、EUR、CNY 和 JPY)、18 种稳定币(例如 USDT、USDC 和 DAI)以及 43 种主要币种(例如 BTC、ETH、BNB、SOL、XRP、ADA 和 DOGE)。
检查五个符号:GOLD25 和 ZABCDE 被接受;ZGLD 有 4 个字符且以 Z 开头,被保留;USDT 是知名资产,被禁止;gold 因使用小写字母而被拒绝
检查五个符号:GOLD25 和 ZABCDE 被接受;ZGLD 有 4 个字符且以 Z 开头,被保留;USDT 是知名资产,被禁止;gold 因使用小写字母而被拒绝

名称是 1 到 64 字节的有效 UTF-8。它不得包含字符 <、>、" 和 ' 或反引号;不得包含控制字符、零宽字符或改变文字方向的字符,也不得包含普通空格以外的任何空格字符;并且不得以空格开头或结尾。

转移单位:TransferToken

TransferToken(类型 11)携带代币 id、一个为步长整数倍的数量、接收方、一个以代币支付手续费的可选标志,以及一笔可选的续存付款。代币 id 0 会被拒绝:ZBC 不是代币,它通过 SendZBC 转移。转移的单位多于发送方所持有数量的交易是付费空操作:它支付手续费,但不转移任何东西。

代币转账也可以托管(见 托管;此时手续费以 ZBC 支付)、流式支付(见 流动支付(流式支付))或定时发放(见 定时转账)。从 0.5.8 版本起,一笔交易可以作为批量交易携带最多 32 笔代币转账,代币种类不限:要么全部执行、要么全部不执行,手续费为各笔单次转账手续费之和,以 ZBC 支付,消息只计费一次(见 每个账户每个区块一笔交易与批量交易)。

以代币支付手续费

有 ZBC 储备的代币可以为自己的转账付费(标志字节为 1)。代币从储备中释放 ZBC 来支付下限,并交出相应数量的单位:

units given up = ceil( released ZBC × supply ÷ backing ), rounded up to the step

供应量和储备都会减少。如果申报的手续费高于下限,多付部分留在代币中。

另见