Corda中PartyAndReference.reference及FungibleAsset引用字段设置问询
在Corda中如何设置
PartyAndReference.reference? 其实这个reference(类型为OpaqueBytes)字段的设计,核心目的是让资产发行方能够自定义区分不同批次或类型的 fungible 资产——毕竟同一参与方可能发行多种不同的可 Fungible 资产,或者同一资产的不同发行批次,用这个字段就能做清晰标识。
具体设置的时候,完全可以根据你的业务需求来定义,常见的实践方式有这些:
- 业务标识编码:用简短的业务相关字符串转成字节数组,比如发行的是"黄金现货"就用
OpaqueBytes.of("GOLD_SPOT".toByteArray()),是"2024年度企业债券"就用OpaqueBytes.of("CORP_BOND_2024".toByteArray()) - 唯一批次UUID:如果需要每个发行批次都绝对唯一,生成一个UUID再转成字节数组,比如
OpaqueBytes.of(UUID.randomUUID().toString().toByteArray()) - 结构化元数据:如果需要携带更多信息(比如发行日期、资产等级),可以把这些信息序列化(比如用Protobuf或Kotlin内置序列化)成字节数组后传入
OpaqueBytes
要注意的是,这个字段是不透明的字节数组,Corda本身不会解析它的内容,只会在资产发行、转移、对账时做字节级的等值比较——也就是说,两个PartyAndReference只有当party身份完全相同,且reference的字节内容完全一致时,才会被认为是指向同一类资产的发行方引用。
给你一个简单的代码示例参考:
// 获取发行方的身份实例 val issuerParty: AbstractParty = serviceHub.identityService.wellKnownPartyFromX500Name( CordaX500Name.parse("O=MetalIssuer,L=NewYork,C=US") )!! // 设置reference为"PLATINUM_2024_Q3"的字节数组 val issuerReference = PartyAndReference( issuerParty, OpaqueBytes.of("PLATINUM_2024_Q3".toByteArray()) ) // 基于这个引用创建自定义FungibleAsset实例 val platinumAsset = MyCustomFungibleAsset( amount = Amount(500, Currency.getInstance("USD")), issuer = issuerReference, owner = ourIdentity, // 其他必要字段... )
总结一下:这个字段没有强制要求的固定值,完全依据你的业务场景来定义,核心是让它能帮你准确区分同一发行方下的不同资产或发行批次就可以了。
内容的提问来源于stack exchange,提问作者Joel
相关产品推荐
相关产品推荐

