合约流程实现了基于合约服务的一系列固定的,按照既定业务规则和法律条款串联或并联起来的合约动作,通过各个合约动作的完成,实现业务在各个流程参与方的执行,实现由机器流程引擎驱动的价值价值高速自动创造,自动流转,自动交换。合约流程一旦运行起来就是一个状态机,合约流程在参与方间共享流程状态,也就是共享一致的状态机的状态。业务参与各方在阅读具体的业务合约流程业务规则,法律条款后,签定合约流程契约,合约流程生效,流程可以通过时间触发,也可以人工触发。初始化后的流程实例按照后续节点的类型,人工节点或是计算节点,实现通过 UI 界面或 API 的外部输入确认的人工执行驱动,功调用合约服务的具体 action 实现代码的机器计算驱动,形成业务价值交易 ,流程引擎调用业务条款检查服务和法律条款满足状态,按照既定的流程规则,引擎驱动流程判断流向下一(多)个节点。业务流程在各个节点流转时,由流程引擎驱动形成一个个的流程流转交易,业务流程合约参与方通过共享流程流转交易实现流程状态共享的目的。流程验证者在本地的沙盒中执行对流程流转交易 的验证,实现流程状态机一致的状态流转。
合约服务
作为业务合约的主体,定义了业务合约最基本的服务内容,每一个合约服务就是一种最小的完整的概念层面的业务语义定义。合约服务定义了完成业务所需的一个或多个动作(action),每个合约动作定义了输入状态和输出状态和要执行的业务逻辑命令。合约服务本身和每一个合约动作,以及其中用到的任何合约条款法律条款都需要用人类语言进行清晰明确的描述,必要时提供合约动作的执行形成一个明确的合约价值交易,合约流程引擎在执行流程节点流转时,按照流程定义的对合约服务动作的调用,自动进行服务动作的执行,从而产生业务价值交易,这是一种内在的,由用户通过 UI 界面基于外部 API 接口实现调用。合约服务可以是一种组合服务,对现有的合约服务动作进行组合,形成新的服务动作业务语义。合约服务的可组合化有得基于已有的业务合约定义,通过快速构建新型的业务合约进行生产关系创新,实现不同产业价值服务的零距离整合。为了实现合约服务的自包含化,并支持服务流程的的编排,以及服务计算窗口化、分布式、可扩展的架构部署要求,合约服务需要定义成无状态的。当签约用户或流程调用合约服务时,合约服务会进行服务路由,基于链服务管理的路由规则,选择特定的合约代码实现来具体验证执行业务价值交易。
公有链是一种开放权限的设计思路,不会显式的设定不同参与人的操作权限,只会采用黑名单机制。而许可链是一种白名单机制,有非常严格的准入机制,只有允许的参与方才可以参与被允许的业务合约。许可链通常采用 PKI 基础设施通过自身的 CA 机构,同企业现有的权限管理系统进行集成,如 LDAP、AD 服务器,进而控制不同的人具有不同的合约操作权限。
区块链由于采用公私钥机制进行交易,不论采用哪种数据模型,都存在最小粒度的基于私钥的账户概念。区块链存在两种类型的合约账户:合约流程账户(Contract Process Account, CPA)和合约服务账户(Contract Service Account, CSA )。外部用户账户会参与到合约流程账户和合约服务账户执行相关的合约动作调用。不同的合约流程和合约服务实例化后的相互关系会非常复杂,我们可以把这三种账户按照使用关系和依赖关系组织成树状结构,采用 merkle 证明的方式进行权限证明验证。
每一个参与主体特别是验证节点都可以参与到区块链的平台运维中来,运维行为包括对运行节点服务的容器化集群,提供支柱扩展能力,安装多语言多 VM 实现节点,支持多节点并行运行,并行验证。生产运维需要有完善的流程,面对区块链日新月异的变化,可以充分利用 DevOps 进行持续开发,持续集成的新开发运维体制和自动化测试部署流程。对于生产系统需要能够进行监控,进行事件记录,对重要事件发出告警,对于告警错误码需要预先制定处理流程,针对区块链系统和业务,还需要预先制定出正常情况和异常情况下的运维流程。
UI 界面和 API 接口
整个区块链服务对外的交互接口,包括提供给人的 UI 界面和提供给其他信息系统或人工智能代理的 API 接口。交互的主要内容包括:
开发 API
整个区块链平台对于可以开放的或者可以权限开放的接口,都提供标准的 API, 允许外部系统或人工智能代理进行访问和操作。区块链的各种业务合约(合约流程,合约服务)信息,区块链的各种交易结果,当前流程状态,资本状态,或者区块链的交易发生证明,资产存在证明,链上治理接口,也都可以 API 的方式向外部系统提供。通过 API 接口,也可以进行各种业务合约的操作,如人工处理的提交,合约动作交易的提交等。
结合上节的跨链架构,我们对跨链价值交换过程进行说明。这里仅以物物交换市场为例,主体 X 是区块链 A 上的价值生产者,主体 Y 是区块链 B 上的价值生产者,主体 X 如果要获得区块链 B 上的价值体,就需要拿区块链 A 上的价值体通过跨链价值交换合约服务同主体 Y 实现等价的物物交换。
首先主体 X 需要加入 A 链上的外链合约服务,接受合约服务规定的合约规则和法律条款,主体 X 还需要加入某个跨链合约服务,如可以实现 A <-> B 交易匹配的一个跨链合约服务,接收跨链交易市场的合约规则 和法律条款。然后主体 X 需按照 A 链上的外链合约服务的合约规则,把自己拥有的一定数量的 A 链的价值体转移到外链合约服务指定的公钥地址上,并指定跨链交易内容,如希望交换另一个区块链 B 上设定数量的价值体,并把交换后的价值体转到自己在另一个区块链 上的公钥地址。后续的交易过程如下:
入 ① 基于 LCV 的外链交易感知
适配子链的客户端验证(LCV)会不断同步区块链 A 的区块头,其对于区块链 A 上的外链合约服务公开的公钥地址敏感,一旦发现存在在公钥地址的交易,就认为存在在跨链交易请求。
入 ② 生成和打包跨链交易
由链适配代码将区块链 A 上的主体 X 指定的跨链交易请求内容(用链 A 上一定数量的价值体兑换链 B 上一定数量的价值体到指定公钥地址上)生成一个子链交易,并且打包子链区块。
入 ③ 提供子链存在跨链交易证明,发起主链跨链服务调用
链适配代码基于 Merkle 树给出一个跨链交易请求在子链上的存在性证明,并按照跨链协议,封装出发往主链的跨链服务调用。
入 ④ 执行链跨链交易代码
主链的跨链服务总线,验证交易 在子链上的存在性证明,分析主体 X 的跨链交易请求内容,将跨链服务调用路由给具体的跨链价值交换合约。同样过程主体 Y 的跨链交易请求(用链 B 上还不一定数量的价值体到指定公钥地址上)也被发往相同的跨链何人交换合约。
入 ⑤ 产生交易日志,更新账本状态
跨链价值交换合约的代码实现,会进行所有的 A <-> B 交易匹配,形成一个 A 链价值体同 B 链价值体的买卖市场深度,一旦可以匹配上主体 X 和主体 Y 的交易请求,就形成一个匹配交易,用以封装 A 链和 B 链价值体在主体 X 和 Y 之间达成交换的结果。跨链价值交换合约本质上就是一个场内交易所。
出 ① 子链路由,提供主链存在跨链交易 证明,向适配子链发起外链合约服务调用
跨链价值交换合约实现代码,会提供一个交易主体 X 和 Y 的跨链匹配交易在主链上的存在性证明,分别向链 A 和链 B 的适配器子链发送转账指令交易 ,一个指示往 A 链 Y 主体指定的公钥地址转移一定数量的价值体,一个指示往 B 链的 X 主体指定的公钥地址转移一定数量的价值体。
出 ② 生成和打包跨链交易
这两个适配子链分别将各自的转账指令交易记录日志,并抢红包进各自的子链区块。
出 ③ 发起外链合约服务调用
链适配代码向各自对应的独立区块链上的外链合约服务发起转账指令交易。 A 链的适配子链会向 A 链的外链合约服务发送一个转账交易 , A 链的适配子链会向 A 链的外链合约服务发送一个转账交易。 A 链的适配子链会向 A 链的外链合约服务发送一个转账交易 ,指示从合约的公开地址上往 Y 主体指定的公钥地址转移一定数量的价值体。B 链的适配子链也会向 B 链的外链合约服务发送一个转账交易, 指示从合约的公开地址上往 X 主体指定的公钥地址转移一定数量的价值体。
出 ④ 执行外链合约代码
A 链的外链合约服务会执行合约代码,生成交易,把由合约控制的,转账指令要求的一定数量的价值体转移给 Y 主体指定的公钥地址。 B 链的外链合约服务会执行合约代码,生成交易,把由合约控制 的转账指令要求的一定数量的价值体转移给 X 主体指定的公钥地址。
出 ⑤ 生成交易日志,更新账本状态
一旦交易被打包进区块,按照链的交易确认特性,最终主体 X 获得了 B 链的价值控制权,主体 Y 获得了 A 链的价值体控制权。
跨链区块链也会提供用户 UI 界面和 API 接口,用户所有在跨链区块链合约服务上执行的交易都可以通过跨链用户界面和 API 接口获得当前的执行状态,即查看用户在交易所挂单状态和交易市场的买卖深度,甚至可以让用户基于私钥按照市场供求关系重新挂单。跨链区块链可以提供基于独立区块链上的外链合约服务的抵押机制,在对应的适配子链上,以换取相同数量的抵押区块链 的价值体幻象或筹码,业务主体拿抵押的子链上的价值体幻象参与主链的业务合约流程,这种跨链的生产关系,基于各个主体抵押的各自区块链上的价值体(也可以是现实世界价值锚定),配置生产资料,开展合约生产,最后分配生产产品价值。跨链区块链如果有自己内生的代币,也可以基于交易市场(合约)完成到内生的代币的价值兑换,主体拿着跨链代币加入跨链合约流程或跨链合约服务的虚拟生产关系进行生产和价值交换。
区块链的划分和发展趋势
区块链划分和功能性要求
为什么在区块链技术上,首先出现 的是比特币这种加密货币,而不是以太坊,也不是跨链 Cosmos? 因为加密货币从业务上更纯粹(数字 vs 合约 vs 市场),从技术上更严密和容易实现(脚本栈 vs 以太坊虚拟机 vs 通用沙箱)。以比特币为代表的加密货币称为可编程货币,以太坊可以建模各种代币和基于代币的合作动作,称为可编程金融,实用化的区块链系统会吸取现有区块链的实践教训,从实际可用的目的出发重新设计区块链架构,真正可用于实际社会的区块链建模的不仅仅是虚拟的价值,还担负着社会生产关系虚拟化的重任,在实现现实世界的价值在虚拟世界的锚定基础上,实现现实世界不同契约,不同业务流程在虚拟世界的共识建模,甚至会创造出统一现实世界和虚拟ablw的新型生产关系合约服务或合约流程,这可以称之为可编程社会。可以看出,区块链的划分不是为了严格区分各种区块链的优劣高下,而是通过划分,区分出不同区块链类型在建模对象和业务处理能力上的不同,以及扎根关注解决问题的不同。更重要的是,就如同现实社会,货币是金融的基础,货币和金融是这个社会运行的核心一样,可编程货币是可编程金融和可编程社会的核心和价值交换基础,可编程金融又会是可编程社会围绕的中心。