Corda Token SDK https://github.com/corda/token-sdk. 默认情况下,可替代代币可以多次发行到许多帐户。 我不知道限制可替代代币发行一次并发送到特定帐户 (之后将不再发行令牌( 有人有想法吗?
要实现这一点,您必须执行以下操作:
- 创建您自己的
EvolvableTokenType
。
您的可进化代币类型 - 将具有 2 个自定义属性(这些属性可能会随着时间的推移而更改,因此我们选择可进化而不是固定代币类型(:
boolean
型issued
AbstractParty
型issueAccount
- 创建一个合约来验证您的可进化令牌类型(它应该扩展
EvolvableTokenContract
(:- 实现
additionalCreateChecks
:您可以将其保留为空。 - 实现
additionalUpdateChecks
:在这里您可以验证您只能将issued
的值更新为true
,您不能将其更新为false
(这将允许发行更多我们不想要的令牌类型(。
- 实现
- 创建一个创建可进化令牌类型的流,它将
issueAccount
设置为作为输入参数传递的值,并将issued
设置为false
。 - 现在,您可以创建可进化的令牌令牌类型,并使用它来颁发该类型的令牌。
- 创建颁发令牌类型令牌的流:
- 它将获取可进化令牌类型的最新版本。
- 如果
issued
的值为true
,则抛出一个FlowException
,指出此令牌已颁发,您无法再次颁发它。 - 使用返回的状态获取
issueAccount
值。 - 调用
IssueToken
流以向issueAccount
颁发令牌类型。 当然,您需要使用RequestKeyForAccount
为帐户生成一个新密钥,并将返回的PublicKey
包装在AnonymousParty
的实例中。 - 现在最重要的部分(您的要求(:调用
UpdateEvolvableToken
流以更新可进化的令牌类型,并将issued
设置为true
。这样,如果有人再次调用您的问题令牌流,它将引发异常,因为您的令牌类型已被issued
。
Kotlin 模板(token
分支(有一个高级的EvolvableTokenType
示例:
- 类型: https://github.com/corda/cordapp-template-kotlin/blob/token-template/contracts/src/main/kotlin/com/template/states/ExampleEvolvableTokenType.kt
- 合同: https://github.com/corda/cordapp-template-kotlin/blob/token-template/contracts/src/main/kotlin/com/template/ExampleEvolvableTokenTypeContract.kt 流
- (它有 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