Qlyphs 文档

账本

所有权是一台状态机,而不是数据库的承诺。每一笔余额都是按顺序应用有效状态转换的结果。

问题

是什么阻止代币凭空产生,或被花费两次?

QLYP 余额不是某个人手动输入的数字。它是这样得来的:从一个固定的起点读取链的历史,按发布的规则,依次应用每一个有效操作。明天在另一台机器上再运行一次,你会得到同一个账本。

单位从不凭空增加

对于每一种资产,下面这个等式在每个区块之后都成立:

守恒

可用 + 已预留 = 已铸造 ≤ 最大供应量

铸造会同时增加供应量和持有者的余额。一次转账从一个余额中扣除,并记入另一个余额。一次报价把单位从可用余额移入预留;出售把它们交付给买家,释放则把它们退回卖家。这些路径都不会创造任何单位。

  1. 01 / 05

    Alice 铸造 1,000

    一次铸造会同时增加已发行供应量和 Alice 的可用余额。除此之外,没有任何方式能创建单位:不存在能修改余额的管理员。

  2. 02 / 05

    她向 Bob 报价 400

    创建一笔有效的报价会把 400 个单位从她的可用余额移入预留。这些单位仍然存在,也仍计入供应量,但她不能再花费它们。

  3. 03 / 05

    她尝试发送 700

    可用的只有 600,因此转账被拒绝。日志记下判定结果,没有任何东西移动:没有部分转账,序列号也不推进。已预留的单位不能花费两次。

  4. 04 / 05

    Bob 买下这笔报价

    Bob 的规范购买结算了这笔预留:400 个单位归他。交付是作用于链上历史的一条规则,而不是由服务器决定是否发送。

  5. 05 / 05

    清理不改变任何东西

    之后清理已用的提案,也无法再给 Alice 记入一次,因为凭证已经结算。每一步中,可用加已预留都等于已铸造的 1,000。

状态记录了什么

部分记录内容
资产创建者、不可更改的定义,以及迄今已铸造的供应量
余额每个账户、每种资产的可花费数量
序列号每个账户下一个会被接受的 QLYP 序列号
预留每笔报价的那份代币,从创建一直到出售、取消或到期
代币符号最先认领每个符号的有效代币
日志每个操作的判定结果(被接受或被拒绝),供查验

除了上面的等式,规则还会检查:余额永不为负,每个符号都指向其资产,各部分之间彼此一致。这些检查捕捉的不只是超额花费:同一个账本内部出现的任何不一致,都会被发现。

按顺序重放,仅在有效时提交

每个已最终确认的区块都应用在上一个状态的副本上。被拒绝的操作只会在日志中留下一条判定结果,别无其他影响:不会出现部分转账,序列号也不会前进。只有当整个区块都已应用、且每项检查依然成立时,新状态才会替换旧状态。

格式错误或未经授权的操作会被直接拒绝。链上区块之间的链接断裂、收据不一致或未知的运行时则不同:那是完整性问题,索引器会停止运行,而不是编造一个看似合理的账本。

没有管理员

规则中没有余额编辑器,没有可更改的发行策略,也没有自动跨链桥。任何在被接受的状态转换之外插入余额的实现,计算的都不是 QLYP 账本。

本页内容