R3 Corda: 金融模型 Financial model

原文地址:https://docs.corda.net/financial-model.html

Corda 提供了大量的在金融应用中使用的数据类型的标准库和合约 state 对象。这个对于 states 和 合约提供了一个通用的语言。

数量 Amount

Amount 类被用来代表某种 fungible asset 的数量。这是一个 generic 类,被提升成为一种类型来定义底层的叫做 token 的产品。例如他可以是标准的 JDK 的 Currency 类型,或者是一个被发行(Issued)的实例,或者是一个更复杂的类型,比如作为一个债务合约发行的定义(这反过来包括了一个 token 类型的定义,这个 token 会用来结算这笔债务)。自定义的 token 类型应该实现 TokenizableAssetInfo 来允许 Amount 转换 helpers fromDecimaltoDecimal 来计算正确的 displayTokenSize

这里的 fungible 代表着能够跟其他的唯一的实例进行互换,并且他们还可以被拆分/合并。例如一个 £5 的纸币(note)可以被合理地转换成任何其他的 £5 纸币,并且一个 £10 的纸币还可以被换成两个 £5 的纸币,反过来也可以。

下边是一些例子:

// A quantity of some specific currency like pounds, euros, dollars etc.
Amount<Currency>
// A quantity of currency that is issued by a specific issuer, for instance central bank vs other bank dollars
Amount<Issued<Currency>>
// A quantity of a product governed by specific obligation terms
Amount<Obligation.Terms<P>>

Amount 会以整数的形式来代表数量。你不可以用 Amount 来表示一个负的数量:如果你想要这么做的话那你比需要使用另外一种类型,通常应该是 BigDecimal。对于货币来说,数量代表着便士(pennies),美分(cents)或者任何对于该货币是最小的整数数量,但是对于其他类型的资产,这可能会代表任何东西,比如 1000 公吨的煤,或者是千瓦小时。对于可显示的数量的精确转换率是要通过 displayTokenSize 属性来实现的,它是 BigDecimal 对于一个单独的 token 的数字展现。Amount 也定义了方法来对 overflow/underflow checked 加法和减法(这个在 Kotlin 中是操作符重载 operator overloads,在 Java 追踪可以向常规方法那样被使用)。更复杂的计算通常应该使用 BigDecial 来做然后再转换回来,以确保进位(rounding)的考虑和确保 token 的转换。

Issued 指的是一个产品(这个产品可以是现金、和现金类似的事物,资产或者任何可以用整数来代表的可数量化的事物)和一个相关的 PartyAndReference,这个 reference 代表了该合约的发行者。一个被发行的产品通常会遵循一个生命周期,其中会包括发行,转移和从账本中消除(比如,查看 Cash 合约和它相关的 state 和 commands)

为了展现数量的转移,tokens 使用 'AmountTransfer类型,它记录了数量和一个转移的目的。正数的数量值表示 tokens 从一个source(比如一个Party或者CompositeKey)转移到了destination。负数值可以用来表示从destinationsource的一个颠倒的转移。apply方法可以用来处理在一个List<SourceAndAmount>中定义好的Amount` 对象列表来开始真正的转移。

金融 states

在常见的 state 类型以外,还有很多扩展了 ContractState 的接口来作为金融 state,比如:
LinearState
这种类型的 states 在它的 StateRef 之上具有一个唯一的标识,这个标识在不同的 state 交换中一直存在。这种类型的 states 在一个 transaction 中不能够被复制、合并或者拆分:只能是或者继续使用或者删除。Linear state 对于生成一个不可分割(indivisible)/non-fungible 的事物(比如一笔指定的交易,或者一个不可拆分的资产,就像一个稀少的艺术品)是非常有用的。
DealState
LinearState 代表一个在两方或多方之间的一个协议。目的是要简化实现通用的协议(generic protocols),该协议可以处理很多种协议类型。
FungibleAsset
一个 FungibleAsset 表示的是可以替换的,可计算的并且可以被制定的一方发行的资产。States 包含了相同的资产(比如同币种的现金),所以如果他们的额发行者是同一个的话,他们可以被合并或者被拆分。比如政府发行的美元是可以替换(fungible)并计算(countable)的(用美分),桶装的西德克萨斯石油是可以替换并计算的(油可以从两个小的容器倒进一个大的容器中),某个公司的同种类别的股份是可替换并计算的,等等。

下边的图表展示了整个 Contract State 的结构:


Financial Contract State Model

注意当前有两个包,一个核心类库和一个金融模型特殊的类库。开发者可以直接重用或者扩展金融类型,或者通过从核心类库中扩展基本的类型来编写自己的类型。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容

  • 表一:数据查询 whc_getinfo 解释:获取当前wormhole节点的基本信息 调用:wormholed-c...
    姜家志阅读 1,076评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • 原文:https://www.ethereum.org/dao翻译:terryc007版本:v1.0 中英混合时...
    terryc007阅读 1,362评论 0 0
  • 转:孔子发现了糊涂,取名中庸;老子发现了糊涂,取名无为;庄子发现了糊涂,取名逍遥;墨子发现了糊涂,取名非攻;如来发...
    hihi456阅读 271评论 0 0
  • 有位妈妈感慨:我现在才理解“孩子是天使”这句话,如果不是养育他遇到困难,我不会去探索,不会深刻反思自己的成长历程和...
    镜花水月_1987阅读 153评论 0 1