Corda:关于token SDK的问题

Corda: Questions about token SDK

我一直在玩Token SDK。我有一个问题。

我制作了一个扩展 FungibleToken class 的新令牌 class,以便我可以将一些信息(例如帐户 ID)添加到令牌中。我还为新令牌制作了架构和 PersistentState,以便我可以通过帐户 ID 查询令牌。

我的问题是,为了使用新架构,我想我需要覆盖 generateMappedObject() 和 supportedSchemas() 函数。但是,由于 FungibleToken returns 中的 supportedSchemas() 是一个 FungibleTokenSchemaV1 列表,因此我无法覆盖 supportedSchemas() 函数。

有人可以给我一些关于如何扩展 FungibleToken(以及 NonFungibleToken)的建议吗?

来自 Corda-Ledger Slack 的问题:http://slack.corda.net/

如果你愿意可以,但我不建议这样做。

如果你想在你的 cordapp 上使用账户,你应该使用账户库:github。com/corda/accounts

如果要向合约添加新功能,则只需要 sub-class 可替代令牌 否则你只需通过实现 TokenType 创建你自己的令牌类型 它是开放的,因为我们(维护者)可能想添加,比如说,WhitelistedFungibleToken 或类似的东西

令牌类型是关于令牌本身的信息。您可以通过创建新的令牌类型来添加有关帐户的信息,但是这可能不是一个好主意。

您应该改用帐户库,它会为您管理帐户……您不需要将帐户 ID 放入您的状态。状态中的 public 键用于 link 特定帐户的状态

这是关于帐户功能的 link:https://github.com/corda/accounts

您可以分叉 Corda 令牌 SDK。

  1. git 克隆存储库

  2. 加载IDE中的存储库并修改文件token-sdk/contracts/src/main/kotlin/com/r3/corda/lib/tokens/contracts/states/FungibleToken.kt,第66行,

    override fun supportedSchemas() : List<MappedSchema> = 
    listOf(FungibleTokenSchemaV1)
    
  3. 别忘了给你的 cordapp 签名: 在 token-sdk/cert/ 中复制(或创建)您的 P12 证书修改 build.gradle(在合同和工作流目录中)带有签名选项的文件

    signing {
        enabled true
        options {
            keystore "${rootProject.projectDir}/cert/deepKeystore.jks"
            alias "cordapp-signer"
            storepass "password"
            keypass "password"
            storetype "PKCS12"
        }
    }
    
  4. 修改build.gradle文件中的“tokens_release_version”字段为tokens_release_version =“1.2.3-XXXX”

  5. 使用 ./gradlew jar

    构建 JARS
  6. 验证 jar 是否已签名 jarsigner -verify tokens-contracts-1.2.3-XXXX.jar

    现在您可以覆盖 supportedSchemas 函数。您将在您的 cordapp 中使用 tokens-contracts-1.2.3-XXXX.jar 和 tokens-workflows-1.2.3-XXXX.jar (而不是官方的 tokens-contracts-1.2.3.jar 版本).

  7. 在你的cordapp中,不要忘记修改build.gradle文件来指定你的tokens-contracts-1.2.3-XXXX.jar.[=47的路径=] Personnaly,我只是将 2 Jars 复制到我的 cordapp 根目录下的“libs”文件夹中,并修改了 repositories 部分中的 build.gradle 文件:

    flatDir {
        dirs "${rootProject.projectDir}/libs"
    }