科技网

当前位置: 首页 >智能

福闰源智能合约系统技术白皮书v02

来源: 作者: 2018-08-04 17:44:18

福闰源智能合约系统技术白皮书v0.2

前言

福闰源致力于打造高性能企业级区块链平台,开发企业级区块链业务系统。

福闰源智能合约系统可以通过在区块链上发行某种代币或者积分来实现具有价值转移或者价值传递的某种业务。

区块链的诞生,标志着人类开始构建真正可以信任的互联。福闰源智能合约系统的问世能够在络中建立点对点之间可靠的信任,使得价值传递过程去除了中介的干扰,既公开信息又保护隐私,既共同决策又保护个体权益,这种机制 提高了价值交换的效率并降低了成本。

福闰源智能合约系统的设计理念和设计原则

区块链技术以去中心化、分布式、区块不可逆等核心特征出现在人们眼前,并得到广泛的关注,这些特点为区块链带来独特的价值,但同时也造成了性能方面的阻碍和不利于结合现有产业应用等问题。福闰源智能合约系统在设计之初,秉承的理念就是通过创新

福闰源智能合约系统技术白皮书v02

,让区块链能够更好的服务与当前和未来的企业;主要目的是提供区块链私链或者区块链联盟链的解决方案。

高性能优势:交易支持秒级确认;提供海量数据存储,具备每秒万级的处理能力

安全特性:提供丰富的权限策略、安全的密钥管理体系和用户隐私保密方案保障

数据安全。

福闰源智能合约系统设计体系介绍

福闰源智能合约系统

区块链是一种以密码学技术为基础,以去中心化的方式,对大量数据进行组织和维护的数据结构。区块链建立在分布式的数据节点上,并且通过共识算法进行同步,因此特别适合作为数字资产的账本。区块链上的数据全部都附有相关人的数字签名,不可伪造。

账户模型和账户体系

福闰源智能合约系统系统里,每一个客户端是都是一个本地钱包。用户在自己的本地钱包中创建一个或多个账户,并且进行相关的账户操作。每一个账户都有唯一的私钥并对应唯一的地址。账户分为普通账户、注册账户、代理账户、出块账户、合约账户:

普通账户:普通账户是一个本地账户,仅在本地钱包内有效,用于区分当前钱包内的多个账户。只有在本地钱包中才可以通过这个普通账户的账户名向该账户转账。

注册账户:普通账户可以升级为注册账户,升级后账户名会被注册到区块链上。用户可以直接使用账户名进行转账操作。区块链上的账户名具有唯一性。升级成注册账户,需要花费一个基本交易手续费。链上的任意账户都可以通过注册账户的账户名向该账户转账。

代理账户:普通账户或注册账户都可以升级成为代理账户,代理账户拥有注册账户的所有功能,并且具有被投票权。

出块账户:当代理账户的排名进入前99名(包括第99名)时,代理账户可以参与系统出块,从而获得出块收益。

合约账户:当合约被注册上链后会产生一个合约账户,合约账户不属于任何一个用户账户,也没有公私钥,因此无法直接操作合约账户进行转账。用户账户可以向合约账户中转账,合约账户也可以向用户账户转账(仅在合约代码中)。

福闰源账户地址生成规则

普通账户地址

合约账户地址

密码学模型

私钥:非公开,是一个256位的随机数,由用户保管且不对外开放。私钥通常是由系统随机生成,是用户账户使用权及账户内资产所有权的唯一证明,其有效位长足够大,因此不可能被攻破,无安全隐患。

公钥:可以公开,每一个私钥都有一个与之相匹配的公钥。ECC公钥可以由私钥通过单向的、确定性的算法生成,候选方案为secp256r1(国际通用标准)、secp256k1(比特币标准)和SM2(中国国标)

对称式加密就是加密和解密使用同一个密钥,也就是说采用这种加密方法时候,加密方与解密方需要使用同样的密钥进行加密和解密,该方式只需要一个密钥+特定算法对数据内容进行加密,加解密效率比较高,因此在对被广泛使用。但是因为解密方也需要密钥,所以保证密钥的安全也成为了一个难题。

与上面相反如果加密和解密是采用不同的密钥,也就是非对称加密密钥密码系统,每个通信方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公钥向其它方公开;得到该公钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把私钥对加密后的信息进行解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。如下图所示两种加密不同:

地址:地址是公钥的摘要,是为了用户能够方便交易而产生的,因为公钥较长约有130字符,而地址比较短,约有35或者36个字符。地址由公钥推导生成:如下:

推导关系:私钥 公钥 地址。过程均不可逆。拥有私钥便拥有一切。

密码学模型

Hash算法

介绍hash算法特点,以及我们系统中使用的各种hash算法

对称加密算法

介绍对称加密算法特点,以及我们系统中使用的对称加密算法

非对称加密算法

介绍非对称加密算法特点,以及我们系统中使用的非对称加密算法

密钥协商算法

介绍密钥协商算法,以及我们系统中使用的密钥协商算法

福闰源智能合约系统平台建立在DPOS共识机制基础上:

产块与块内交易的共识

在系统正常运转的情况下,产块共识保证了在同一个产块周期内只有一个确定的产块代理会产块。且代理生产的块可以通过其他其他节点的验证,并且前一个块和后一个块之间可以通过特定的规则串联在一起(后一个区块中记录前一个区块的区块哈希)

产块代理共识/顺序共识

在系统正常运转的情况下,产块共识保证了在同一个产块周期内只有某一个确定的产块代理会产块。

由投票决定新一轮的产块代理,对于所有节点来说,每个代理的投票在所有不同的节点上都是确定的,而且是一致的。

由random_seed来决定新一轮的产块顺序。产块顺序是由所有代理节点共同决定,并保证无法被预知和篡改。这个行为在所有的节点上也是可以达成共识的。

交易/块验证共识

处于相同状态下的多个节点,进行相同的操作,产生的结果必然是一致的

合约共识(特殊的交易共识)

智能合约的同一个操作可能会在不同区块链节点不同时间执行,在处于相同状态下的不同节点上执行同一个操作,在任何时间点任何节点的执行结果以及对状态的改变都一样,可以复现执行结果,并且智能合约本身不可篡改,从而可以确保一定能够达成共识并且无法不可伪造执行结果。

智能合约

智能合约介绍

1995年,密码学家尼克萨博(Nick Szabo)提出智能合约的概念。

他在发表在自己的站的几篇文章中提到了智能合约的理念。他的定义如下:一个智能合约是一套以数字形式定义的承诺(promises),包括合约参与方可以在上面执行这些承诺的协议。

他提出区块链计算机,将其定义为依靠密码学和共识技术,为存储在区块链数据架构中所有数据,创建不可伪造证据链。

区块链上的智能合约

链上存储的一段可执行字节码,可以被外部触发调用。

可以由图灵完备的合约语言编写,经过编译后存储到区块链上。

支持执行指定数量的字节码之后的停机操作。

为什么说区块链是智能合约天然的生存土壤,是由区块链一些特性决定的:

去中心化的系统

安全的完善的密码学原理保障公私钥密码体系

交易数据全共识,不可篡改

合约中的交易可以通过区块链上资产进行交易

福闰源智能合约系统上的智能合约

在福闰源智能合约系统系统中,将智能合约设计为一个包含代码和数据存储的链上对象。合约的拟定者可以用支持的计算机语言描述合约条款,设定执行条件,以及达到执行条件后执行的操作,参与接口等。在合约拟定者将合约注册到区块链上后,其他用户可以通过调用接口来参与合约。在合约语言正确表述合约内容的前提下,在达到执行条件时,区块链系统会按照合约代码的描述执行相应的操作。从而解决并不会有现实中参与方拒绝履行条款的问题现象

交易验证

从交易类型上来看,交易可以分为普通交易和合约交易

普通交易(非合约交易)

普通交易在所有节点都会验证,并且上验证方法一致,交易在所有的节点上达成共识。

合约交易(合约原始交易/合约结果交易)

合约交易分为合约原始交易以及合约结果交易

合约原始交易只有在受托人出块节点上验证(会打开解释器执行)进行验证,后并产生结果交易,该结果交易会包含在块中,由其他的出块节点再次验证(打开解释器执行,并验证);

除了在交易创建合约交易的节点上,在进行交易创建的时候,其他情况下合约交易在普通节点上验证是不会执行解释器,只做基本验证。

块中的合约结果交易在受托人节点上达成解释器验证共识,并产生共识后的结果交易;

块中的合约结果交易在所有普通节点上达成基本结果交易验证共识结果交易共识。

从交易的本质上来看,交易可以分为确定交易和不确定交易

确定交易(普通交易/合约结果交易):在一些交易中,如转账,用户可以明确的知道要执行的操作,这些交易的创建时会直接将要执行的操作执行存入交易中。受托人只需按照交易内容执行打包没有问题的交易即可

非确定交易(合约原始交易):在另外一些交易中,如调用合约,调用者并不能预测合约会执行的操作,因此创建此种交易时仅保存用户请求,当受托人打包交易时,按照合约执行,将结果连同初始的请求一同打包成结果交易,(结果交易可以认为是一个确定的交易,但是由于结果交易都是由受托人产生,因此无法在合约交易创建时,就获知一个带有确定结果的结果交易)。

交易验证

对于确定交易,验证分为两部分:

签名交易真实性验证: 在涉及操作资产时,如个人资产出账操作,需要确保交易发起者就是时该笔资产的所有人,。系统在操作需要签名的资源时会检查交易中是否存在所需签名。

执行交易合法性验证:按照交易内容执行交易,在再不存在逻辑冲突的情况下,如果如不从只有20余额的账户提30出来之类的操作,都可以通过验证出交易是否合法。

对于不确定交易,受托人在进行执行验证时会执行发起人的请求根据当前链的状况生成可行的结果存入交易,用于标识发起人的操作的结果。对于合约的原始交易调用解释器执行,并产生对应的结果,然后进一步验证结果的合法性。

区块链交易模拟器

在钱包打开并解锁的状态下,可以打开进入交易模拟器模式。

交易模拟器模式会根据当前的状态产生一个新的缓冲区,在交易模拟器模式下进行的合约相关的交易行为都会被在本地执行合约解释器并验证,并将结果记录在这个缓冲区下,且不会被广播到区块链络中。

当交易模拟器模式被关闭时退出交易模拟器模式,这个缓冲区就会被丢弃,不会造成任何影响。

区块链链上事件

对于普通节点来说,由于在验证接收到的区块的过程中,并不会像代理节点那样执行解释器进行验证,因此对于合约中发生的一些情况缺乏感知能力。因此可以由代理节点在执行相关的合约中达到的一些特定的关键点(需要产生一个通知信息)的地方产生一个合约事件,事件功能可以用来提升用户对交易以及交易中的一些中间环节的感知能力。,

同时并且可以对感知到的状况可以做一些自定制的反馈,提升可交互能力。(通过本地脚本的方式,或者由用户自行定制的一些方式)。

区块链合约关以及区块链链间关

针对链下数据的区块链合约关

链下的事实数据通过业务关投放入区块链,触发链上合约交易的共识。

针对另一条链的区块链链间合约关

链间数据交换,合约的输入是由另一条链上的交易数据达成的共识,由链间合约关承担数据转运的工作

福闰源智能合约系统实现方案

合约和虚拟机

合约语言

Glua是一种图灵完备的编程语言,编译器和字节码解释器虚拟机为在区块链中做了针对性设计和优化。

我们使用Glua语言作为福闰源智能合约系统上智能合约使用的默认编程语言,支持静态编译成字节码然后在区块链络中根据需要执行字节码。

Glua是一种图灵完备的编程语言,编译器和字节码虚拟机为在区块链中做了针对性设计和优化。

合约解释器

合约解释器是Glua的字节码的解释器,在区块链络中涉及到智能合约的操作或块同步验证中,区块链节点需要时会从区块链中取出合约字节码,用Glua字节码解释器加载字节码,然后使用合适的参数调用需要的API,得到的运行结果和上下文状态变化会被区块链使用。

合约执行共识

一次对智能合约的操作,可能在很多不同节点不同时间调用不定次数,但是在同样的状态下,同一个操作在不同节点下、不同时间点每次调用执行产生的结果和对上下文状态的改变都是一样的。

合约的花费

智能合约的操作,因为需要不同节点的计算机资源进行执行以及占用区块链容量和络流量,所以智能合约的操作需要扣除一定的执行花费。

合约的生命周期

编写Glua源码文件

使用Glua编译期将Glua源码文件编译成Glua字节码文件(如果编译成功,否则根 据报错返回第一步)

使用Glua字节码文件注册链上临时合约

向合约进行转账

使用一定参数调用合约的API

链上临时合约升级到链上永久合约

链上临时合约销毁为链上不可用合约(合约依然存在但是不可继续使用)

链上合约导出Glua字节码文件文件

合约语法主要特性:

完整的图灵完备的编程语言

编译期静态类型

直观易用的语法

支持函数闭包和高阶函数,Lambda表达式,支持函数式编程风格和过程式编程风格

合约中支持引用其他合约

提供常用内置库

智能合约的状态存储的改变,占用区块链存储总容量小

合约字节码解释器的优势: 针对区块链做了安全性优化以及执行开销计算和控制 可共识的随机数发生器

随机数的计算方法产生方式

使用未来某个块的random_seed做为生成随机数的依据random_seed是通过上一次的random_seed和当前出块节点的previous_secret计算相当于是由多个代理节点共同维护并计算出来的结果,并且previous_secret是上轮就已经计算并确定,且在上轮出块后就将其摘要公布,可以被其他节点验证,因此可以认为这是一个可靠的,由多个代理共同维护计算并验证,可共识的随机数生成算法。并且是无法被操纵,无法被推算的随机数。

应用:

代理出块顺序

合约获取随机数

区块链合约交易模拟器

模拟合约交易的验证,提供无成本的合约调试方案

打开合约交易模拟器时会在当前状态下产生一个缓存,在合约模拟器内创建的合约交易会在缓存内验证并提交。当模拟器关闭,此缓存会被丢弃,且不会影响链上任何真实的交易数据。

在钱包打开并解锁的状态下,可以打开智能合约交易模拟器。

模拟器会根据模拟器打开当时的数据状态产生一个新的缓冲区

在模拟器中进行的交易行为(与合约相关的行为)都会被在本地验证,并将结果变化记录在这个缓冲区下,且不会被广播到区块链络中。

当模拟器被关闭时,这个缓冲区就会被丢弃,模拟器中的所有操作也都会失效。

交易模拟器的作用:

降低调试合约的成本(模拟器中调试不需要花费任何真实链上费用)

减少错误合约上链的概率(当模拟器调试成功后,再进行正式上链,在模拟器中模拟上链的合约,一旦退出模拟器,立即失效)

缩短调试合约的时间(本地立即验证,不需要等待出块时间)

离线调试合约(不需要连入区块链P2P络中,甚至不需要连入Internet)

区块链链上事件以及链下回调

可以为合约中的事件绑定回调机制,在接收到这种类型的事件时,则触发这个回调。

我们提供了默认的Script脚本回调,也可以由用户也可以根据自己的情况自行自定制。

合约支持事件机制

受托人执行合约,触发某个事件合约的event事件,会将其event事件信息记录到结果交易,结果交易会被一起打包到入BLOCK中,并进行广播

事件机制的作用

由于一个智能合约在不同状态的前提下不同的时间点或者不同的外部条件下调用下,可能会进走入合约代码的不同分支,执行不同的代码逻辑。对于调用者来说,无法并不能很好得了解合约执行的状况,有了事件机制,用户就拥有了了解合约执行中的状况,以及获取合约执行结果的能力。

拥有了这样的能力,用户可以根据接收到相应的事件,做出相关的反馈动作,比如说再次发起一笔交易,或者发起一个合约的调用,或者一些本地的动作,比如说记录日志,或者记录数据库,或者进行一个HTTP POST这些。甚至用户还可以制作一个具有决策能力的程序来对接到我们的区块链中,进行一些实务的决策,并根据决策结果来实施不同的反馈操作。比如说

智能合约执行结果收集工具

链上彩票合约的无人值守投注

链上交易所自动量化交易工具

链上资产合约的自动汇兑工具

区块链合约关以及区块链链间关

合约关

链间关

不同链之间的价值交换的媒介

福闰源智能合约系统数据指标

普通交易TPS 1000

合约交易TPS 100

块大小 10m

代理数量 99

产块间隔 10s

产块时间 3s

福闰源智能合约系统应用场景

转账汇款、价值媒介、登记确权、事实存证 、供应链管理、过程溯源、股权发行交易、资产数字管理、票据流转、票据交易、三方交易、三方托管、资产交易关、资产汇兑、众筹募资、慈善募捐、博彩、医疗、文化

福闰源区块链智能系统未来应用方案

福闰源在自主创新的基础上,打造了提供企业级服务的福闰源区块链智能系统未来应用方案。基于开放分享的理念,福闰源将搭建区块链基础设施并开放内部能力与全球企业共享,共同推动可信互联的发展,打造区块链的共赢生态联盟链。福闰源在支付与金融、社交、媒体等多个领域积累了丰富的行业与技术经验,在高频率的交易处理方面取得了业界领先的突破;此外,福闰源还具备海量数据处理和分析金融安全体系构建的能力,在生态联盟链和行业连接的探索上也积累了丰富的经验。

福闰源区块链智能系统方案的设计目标

福闰源区块链智能系统致力于提供企业级区块链基础设施、行业解决方案以及安全、可靠、灵活的区块链云服务。

福闰源区块链智能系统方案的设计

自主创新,福闰源区块链智能系统注重自主创新,目前在关键领域已经拥有多项自主知识产权的独特核心技术。核心定位于打造领先的企业级区块链智能基础平台。向最终用户提供可信、安全、快捷的区块链应用,福闰源未来将携手各行各业的合作伙伴及其技术供应商,共同探索行业区块链发展方向,共同推动区块链应用场景落地,共同在福闰源区块链智能系统的平台上辐射多个领域,着实在福闰源区块链智能系统实体应用中实现多方共赢。

相关推荐