【问题标题】:Corda: Questions about token SDKCorda:关于令牌 SDK 的问题
【发布时间】:2021-09-21 21:25:10
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: corda


    【解决方案1】:

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

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

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

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

    您应该改用帐户库,它会为您管理帐户……您不需要将帐户 ID 放在您的状态中。状态中的公钥用于将状态链接到特定帐户

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

    【讨论】:

      【解决方案2】:

      您可以分叉 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. 使用 tokens_release_version = "1.2.3-XXXX" 修改 build.gradle 文件中的 "tokens_release_version" 字段

      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 的路径。
        个人而言,我只是将 2 个罐子复制到我的 cordapp 根目录下的“libs”文件夹中,并修改了 repositories 部分中的 build.gradle 文件:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-29
        • 1970-01-01
        • 2020-09-06
        • 1970-01-01
        • 2018-09-08
        • 2010-12-07
        • 2016-08-17
        • 2020-01-22
        相关资源
        最近更新 更多