如何限制通过Corda令牌SDK仅使用特定帐户发行一次可替代令牌

  • 本文关键字:令牌 一次 Corda 何限制 SDK corda
  • 更新时间 :
  • 英文 :


Corda Token SDK https://github.com/corda/token-sdk. 默认情况下,可替代代币可以多次发行到许多帐户。 我不知道限制可替代代币发行一次并发送到特定帐户 (之后将不再发行令牌( 有人有想法吗?

要实现这一点,您必须执行以下操作:

  1. 创建您自己的EvolvableTokenType
  2. 您的可进化代币类型
  3. 将具有 2 个自定义属性(这些属性可能会随着时间的推移而更改,因此我们选择可进化而不是固定代币类型(:
    • booleanissued
    • AbstractPartyissueAccount
  4. 创建一个合约来验证您的可进化令牌类型(它应该扩展EvolvableTokenContract(:
    • 实现additionalCreateChecks:您可以将其保留为空。
    • 实现additionalUpdateChecks:在这里您可以验证您只能将issued的值更新为true,您不能将其更新为false(这将允许发行更多我们不想要的令牌类型(。
  5. 创建一个创建可进化令牌类型的流,它将issueAccount设置为作为输入参数传递的值,并将issued设置为false
  6. 现在,您可以创建可进化的令牌令牌类型,并使用它来颁发该类型的令牌。
  7. 创建颁发令牌类型令牌的流:
    • 它将获取可进化令牌类型的最新版本。
    • 如果issued的值为true,则抛出一个FlowException,指出此令牌已颁发,您无法再次颁发它。
    • 使用返回的状态获取issueAccount值。
    • 调用IssueToken流以向issueAccount颁发令牌类型。 当然,您需要使用RequestKeyForAccount为帐户生成一个新密钥,并将返回的PublicKey包装在AnonymousParty的实例中。
    • 现在最重要的部分(您的要求(:调用UpdateEvolvableToken流以更新可进化的令牌类型,并将issued设置为true。这样,如果有人再次调用您的问题令牌流,它将引发异常,因为您的令牌类型已被issued

Kotlin 模板(token分支(有一个高级的EvolvableTokenType示例:

  1. 类型: https://github.com/corda/cordapp-template-kotlin/blob/token-template/contracts/src/main/kotlin/com/template/states/ExampleEvolvableTokenType.kt
  2. 合同: https://github.com/corda/cordapp-template-kotlin/blob/token-template/contracts/src/main/kotlin/com/template/ExampleEvolvableTokenTypeContract.kt
  3. (它有 2 个流,创建令牌类型并颁发它(:https://github.com/corda/cordapp-template-kotlin/blob/token-template/workflows/src/main/kotlin/com/template/flows/ExampleFlowWithEvolvableToken.kt

此外,令牌 SDK还有一个使用EvolvableTokenType的示例,其中House令牌具有可以更改的属性 (valuation(:
https://github.com/corda/token-sdk/blob/master/docs/DvPTutorial.md#define-your-states-and-contracts

最新更新