我一直在玩Token SDK。在这里我有一个问题。
我创建了一个新的令牌类来扩展FungibleToken类,以便我可以在令牌中添加一些信息(例如帐户ID)。我还为新令牌创建了架构和 PersistentState,以便我可以按账户 ID 查询令牌。
我的问题是,为了使用新的模式,我认为我需要覆盖generateMappedObject()和supportSchemas()函数。但是,由于 FungibleToken 中的 supportedSchemas() 返回 FungibleTokenSchemaV1 列表,因此我无法覆盖 supportedSchemas() 函数。
有人可以给我一些关于如何扩展FungibleToken(以及NonFungibleToken)的建议吗?
来自Corda-Ledger Slack的问题:http://slack.corda.net/
如果你愿意,你可以,但我不建议。
如果您想在 cordapp 中使用帐户,您应该使用帐户库:github.com/corda/accounts
如果您正在向合约添加新功能,则只需要子类可替代代币 否则,您只需通过实现TokenType
来创建自己的令牌类型 它是开放的,因为我们(维护者)可能想要添加,比如说,WhitelistedFungibleToken
或类似的东西
令牌类型是有关令牌本身的信息。您可以通过创建新的令牌类型来添加有关帐户的信息,但这可能不是一个好主意。
您应该改用帐户库,它为您管理帐户...您无需将帐户 ID 放在您的州。状态中的公钥用于将状态链接到特定帐户
以下是有关帐户功能的链接:https://github.com/corda/accounts
你可以分叉 Corda 代币 SDK。
-
git 克隆存储库
-
在 IDE 中加载资源库并修改文件
token-sdk/contracts/src/main/kotlin/com/r3/corda/lib/tokens/contracts/states/FungibleToken.kt
第 66 行override fun supportedSchemas() : List<MappedSchema> = listOf(FungibleTokenSchemaV1)
-
不要忘记在 cordapp 上签名: 使用签名选项复制(或创建)
token-sdk/cert/
修改build.gradle
(在合同和工作流目录中)文件中的 P12 证书signing { enabled true options { keystore "${rootProject.projectDir}/cert/deepKeystore.jks" alias "cordapp-signer" storepass "password" keypass "password" storetype "PKCS12" } }
-
修改build.gradle文件中的"tokens_release_version"字段,tokens_release_version="1.2.3-XXXX">
-
使用
子./gradlew jar
构建罐 -
验证 JAR 是否已签名
jarsigner -verify tokens-contracts-1.2.3-XXXX.jar
现在,您可以覆盖
代币-合约-1.2.3-XXXX.jar 和代币-工作流-1.2.3-XXXX.jar(而不是官方代币合约-1.2.3.jar 版本)。supportedSchemas
函数。您将在 cordapp 中使用 -
在您的 cordapp 中,不要忘记修改
build.gradle
文件以指定您的代币合约-1.2.3-XXXX.jar 的路径。
就个人而言,我只是将 2 个 Jars 复制到我的 cordapp 根目录的"libs"文件夹中,并在repositories
部分中修改了 build.gradle 文件:flatDir { dirs "${rootProject.projectDir}/libs" }