如果我在 Corda 上创建代币,我如何确保发行人知道每个人的余额?

If I create a token on Corda, how can I ensure that the issuer knows everyone's balance?

我已经在 Corda 上创建了一个代币。如何让发行方及时知道每个节点的代币余额是多少?

好吧,乔尔...这是一个很好的问题 - 这样做在客户资产和托管方面通常被称为 "internal reconciliation"!我假设:

  • 每种令牌类型有一个发行人
  • 该发行人负责发行和赎回代币
  • 发行人跟踪发行了多少代币!
  • 希望持有代币的参与方节点必须向执行 KYC 和持续交易监控的发行人注册——这可能是大多数监管辖区的要求。如果这不是必需的,那么就没有好办法真正知道谁目前持有发行者代币!

发行方知道发行和赎回了多少代币,但不知道发送了多少代币to/from各方节点,也不知道谁持有代币。也就是说,发行人需要对所有节点完成这个等式:

node_balance = issued - redeemed + in - out

有很多方法可以做到这一点,每一种都有好处和权衡:

  • 发行人共同签名。 这是一个糟糕的模型,它增加了围绕发行人的中心化程度。什么是发行人下线,没有人可以交易等不推荐。
  • 编写一组流程,简单地询问每个注册持有令牌的节点他们的余额是多少。这是一种天真的方法。派对节点可以谎报他们的余额,但它很容易实现。网络法律协议可以强制参与方节点"tell the truth",否则他们将被驱逐出业务网络。
  • 编写一组流程,要求每个节点将其现金状态和来源链返回到发行交易。每天执行一次。在这里使用机密身份是强制性的,因为发行者节点最终将持有所有现金状态和所有涉及现金的先前交易。好消息是发行人可以放心余额。坏消息是,这可能不适用于大型网络(一次有大量流量),而且我已经提到了侵犯隐私的问题。节点也可以选择不响应。
  • 使您的令牌滚动过期。 例如,令牌每月滚动过期。如果令牌过期,则必须与发行者兑换新令牌。然后,发行人可以推断出每个节点在特定时间点的余额是多少。这是一种有用的方法,因为它缩短了来源链(对于可扩展性和隐私问题很有用)。它确实稍微增加了中心化程度,但代币不会在同一时间全部到期,因此发行人不会不知所措。缺点:如果发行人离线,则无法兑换和使用代币。
  • 使用 SGX 或零知识证明或多方计算。这是我们希望在未来实现的东西。发行人可以放心每个人都持有 "Correct" 余额,即没有欺骗/双花,但不知道每个派对节点的余额。
  • 要求每一方节点匿名post他们的余额到public公告板。发行人将知道是否有任何余额不正确(太多或太少标记)但不知道 post 成员是谁。这可能必须在您的业务网络中强制执行,或者某些

还有其他几种方法,但我目前仍在弄清楚它们是如何工作的。

最后,值得注意的是,如果没有监管要求知道谁持有代币以及他们拥有多少代币,那么我一开始就不会费心设计这个过程!请记住,Corda 实施控制以确保节点所有交易都是原子的(它们要么发生要么不发生)并且不会有代币的双重支出。合同代码还向节点保证,没有发行人的签名,任何代币都不能被制造或销毁。鉴于这种情况,即使我们 不知道 每一方的余额,我们也可以确信他们根据已签署并提交给分类账的交易持有正确的余额.