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

Joe*_*oel 4 corda

我在Corda上创建了一个令牌。如何允许发行者在任何时间点知道令牌的每个节点的余额是多少?

Rog*_*lis 5

好吧,乔尔(Joel)...这是一个很大的问题-这样做通常被称为客户资产和托管条款的“内部和解”!我假设:

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

发行者知道已经发行和赎回了多少个令牌,但是不知道已经向/从每个参与方节点发送了多少个令牌,也不知道谁持有令牌。换句话说,发行方需要为所有节点完成以下等式:

node_balance = issued - redeemed + in - out
Run Code Online (Sandbox Code Playgroud)

有多种方法可以实现每种方法的收益和权衡:

  • 发行人共同签名。这是一个可怕的模型,增加了发行人的集中度。发行人是脱机的,没有人可以交易等。不建议。
  • 编写一组流程,简单地询问每个注册的节点以持有令牌的余额。这是一种幼稚的方法。政党节点可以依靠它们的平衡,但是实现起来很简单。网络法律协议可能会要求当事方节点“说明事实”,或者将其从业务网络中驱逐出去。
  • 编写一组流程,要求每个节点将其现金状态和来源链返回给发行交易。每天执行一次。这里必须使用机密身份,因为发行者节点最终将持有所有现金状态和所有涉及现金的先前交易。好消息是可以确保发行人有余额。坏消息是,这可能不适用于大型网络(大量流量),而且我已经提到了侵犯隐私的行为。节点也可以选择不响应。
  • 使您的令牌以滚动方式过期。例如,令牌按月滚动过期。如果令牌到期,则必须与发行者一起兑换新令牌。然后,发行者可以推断出每个节点在特定时间点的余额。这是一种有用的方法,因为它缩短了来源链(对于可伸缩性和隐私问题很有用)。它的确使集中度有所提高,但是令牌并不会在同一时间全部到期,因此发行人不会感到不知所措。缺点:如果发行人离线,则无法兑换和花费代币。
  • 使用SGX或零知识证明或多方计算。这是我们将来希望实现的东西。发行人可以放心,每个人都拥有“正确的”余额,即没有重复支出/重复支出,但不知道各方的余额。
  • 要求每个参与方节点将其余额匿名发布到公共公告板上。发行人将知道任何余额是否不正确(令牌过多或太少),但不知道发帖人是谁。这可能必须在您的业务网络中强制执行,或执行其他操作

还有其他几种方法,但我暂时仍在弄清楚它们的工作方式。

最后,值得注意的是,如果没有法规要求知道谁持有代币以及持有多少代币,那么我就不会一开始就设计此流程!请记住,Corda实现控件以确保节点所有交易都是原子性的(它们要么发生,要么不发生),并且不会有重复使用令牌的情况。合同代码还向节点保证,如果没有发行者的签名,就不能制造或破坏令牌。在这种情况下,即使我们不了解每一方的余额,我们也可以根据他们已签署并承诺到账本的交易来确保他们拥有正确的余额。