一文读懂智能合约的金融应用设计
北京航空航天大学分布式实验室 北京航空航天大学云南创新研究院 黄洁华,王思远
P2P互联网金融模式是一个典型的区块链应用场景,对金融众筹这种需要非常高的可信度的行业来说,使用区块链技术是非常有必要的,区块链技术可以给企业和公司带来很高的公信力;区块链上的智能合约可以通过代码合约实现对众筹系统价值流的控制,对于提高众筹业务的效率和可信度也是非常重要的,将众筹业务流转换成智能合约代码,代码与状态均存放在区块链上面,并由区块链执行,不仅合约代码本身具有不可更改的可信性,而且可使得众筹业务具有可观察与可信验证的特点,提高系统的公信力;此外,区块链是一种分布式的存储架构,可以很容易的在不同的用户处放置不同权限的节点,参与或部分参与管理,发布权威认证或消息,并且所有内容是不可更改,可追踪、可监管的。
1. 众筹智能合约的设计
众筹业务流程中,集资者会在平台上发布众筹项目,并为项目设置几种回报方式:利润回报、实物回报和抽奖回报,根据用户的资金多少,会有不同的回报方式。本文的智能合约主要针对利润回报方式的众筹项目进行设计。
众筹区块链中,以智能合约的形式来自动完成众筹项目集资过程与还款过程。集资者与平台管理者将众筹项目的投资规则转换成项目合约,投资者投资爱项目的时候,根据预设规则会生成投资合约,投资合约是用于执行还款计划的。由此看出,众筹智能合约的全生命周期活动主要包括:项目生成、项目发布、代码验证与代码执行,如图1所示。
图1 智能合约全生命周期活动
项目生成就是填写项目模板,包括项目序号、项目发起者ID和项目执行环境参数、项目代码与其哈希和合约代码与其哈希,加上项目哈希(为以下内容的哈希值,包括项目序号、发起者ID、项目执行环境参数、项目代码哈希和合约代码哈希)。其中,项目代码的主要功能是生成合约与修改项目状态。合约代码的主要功能就是执行还款计划和债权转让的功能(其中债权转让可以作为后期实现)。
项目发布指把签名后的项目发布到区块链上。当项目代码生成后,先由项目发起者检验并签名,然后众筹平台管理者审核后签名并构造项目生成交易,发送到区块链中处理。
代码验证指用形式化的方法减少合约设计上的错误,和验证代码与文本的一致性。
代码执行指当区块链接收到代码的触发交易时,从区块链读取代码,然后基于交易内容、合约状态与外界信息来执行代码,并通过区块链提供的智能合约接口查询区块链信息和把执行结果返回到区块链上,其中,接口如表1所示:
表1 区块链提供的智能合约接口
为了保证合约代码的可信性,所以把代码直接存放在区块链上,当有交易触发的时候,区块链的计算节点会读取链中的代码并执行。为了说明合约的触发执行机制,下面以Java实现来举例说明。
Java程序在运行之前会将所有的对象加载,这样可以在运行状态中,能够知道和调用这个类的所有属性和方法,Java语言的反射机制使得程序可以动态获取对象信息以及动态调用对象的方法。利用Java对象的本质,用Java语言编写智能合约,在运行过程中,利用Java反射机制实现合约代码的触发执行机制。如图2所示,合约代码生成后会被编译成字节码,通过交易存储在区块链中等待触发执行,当被触发的时候,由区块链提供的智能合约接口实现与管理链与合约的信息交互。
图2 基于Java反射机制的智能合约执行模型
2. 智能合约的存储模型
区块链对合约代码与状态的存储保证了合约存储的可靠性与可观察性。以Ethereum为例,智能合约是存储在区块链上的代码,合约状态存储在区块链中,通过区块链节点执行合约代码,相当于商业交易、监督管理过程中法律、法规的执行者,并把通过分布式一致性算法的合约计算结果存储在区块链中,更新合约状态。区块链相当于一个基于交易的状态机,从初始状态出发,交易促使状态的改变。状态是指与现实世界相关的、计算机可表示的任何数据,包括账户存款、信誉等。
可给出区块链的状态转变如下所示:
区块链会将所有的交易存储在区块中,便于后面的追溯查询,与Ethereum一样,区块链的最新状态会被存储在MPT(Merkle Patricia Trie)中,不仅可以即时生成最新状态的摘要,还可以根据key快速查找到所需信息。
众筹区块链中,集资方在众筹项目中设置回报条件,不同的资金大小会有不一样的回报利率,用户还可以选择不同的还款方式。因此,不同的用户在众筹区块链上投资同一个众筹项目就会产生不同的合约。在传统的MPT中,如果将一个项目的所有合约存储在一个区块中,是十分不利于查询的,所以在传统的MPT模型基础之上,通过添加子树机制可以得到如图6存储模型,先根据项目编号,查询项目树根,由项目树根查询合约内容。
图3 区块链状态存储模型
根据众筹业务与区块链的需求,我们设计如下多种数据存储节点,如用户节点、计算节点、第三方节点、项目节点与合约节点(项目树中包含合约节点)。
1)用户节点:Key值为‘1’+用户编号,Value值包括用户ID、余额和用户持有的钱包地址。
2)计算节点:Key值为’2’+计算节点编号,Value值包括计算节点的身份信息与公钥地址。
3)第三方节点:Key值为’3’+第三方节点编号,Value值包括第三方节点的身份信息与公钥地址。
4)项目节点:Key值为’4’+项目编号,Value值包括项目状态树根、项目状态和项目代码。
5)合约节点:Key值为’5’+合约编号,Value值包括合约状态与代码。
该系统已经成功商业应用。
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。