概要
- 状态代表着账单上的事实
- 涉及状态的有两个操作:一是把当前的状态标记为历史状态;二是创建一个新的状态。所以做查询的时候有CONSUMEND,UNCOMSUMED,ALL三种状态
- 每一个节点或者叫做party都有一个Valut(Corda中是一个Mysql数据库)来存储state
概览
一个状态是一个不可改变的对象代表着一个事实,并且这个事实在一个确切的时间点被一个或者多个Corda节点所知道。状态可以包含任意数据,代表着不同种类的事实(现实生活中的一些实体)比如股票,证券,贷款,KYC 数据以及身份信息。
比如,下面这个状态代表一个业务 IOU (I own you)----- Alice owns Bob ,表达Alice和Bob达成一致协议。
确切地说,这个状态代表着Alice欠了Bob10美元。IOU 就是一个状态。IOU 表达现实生活中的一种关系,我欠你东西。
状态包含任意信息,状态也包含Contract的一个引用,这个Contract掌管着状态随着时间的进化(把当前的状态标记为historic,然后创建一个新的状态)。
状态序列
在状态的世界中,你不能直接去修改状态来反应它的改变(更新),因为状态是不可变的。在区块链的世界中数据一旦上链,则不可更改,在Corda的世界中也是如此。
在一个可被分享事实的生命周期中,随着时间的变化,这些被分享的事实也会“更新”,这一连串的事实也就组成了一个状态序列。当一个状态需要改变的时候,我们就创建一个新的状态版本,这个新的状态版本代表着这个世界的一个新的状态,就把已经存在的状态标记为历史。
随着时间的流动(线性流动),这个状态序列一直在更替,因此给了我们一个可分享事实进化的全部视角。我们可以捕获到如下场景:
数据库(vault)
在这个网络中,每一个节点都维持着一个Vault(数据库),在这个数据中可以追溯状态的当前与历史状态。可追溯。
在Corda中,状态有两种情况:一是我们标记为历史的那就是CONSUMED HISTORICAL STATES。二是UNCONSUMED。
在Corda中,持久使用的是Hibernate,在拼接查询条件的时候,默认查询UNCONSUMED。而查询条件有三种选择,CONSUMED,UNCONSUMED,ALL。
我们可以从节点拥有所有当前状态集合的观点来思考账单。