合约即合同,自动售货机更是大家熟悉的东西,通过自动售货机你可以非常方便的买到水或饮料。它在我们生活中无处不在,你去超市购物,超市标出了货物的价格,你从众多货物中挑选中一款你认为适合你的,然后你去收银台付款,付款完后,其实你和超市已经形成了一种合约的存在等。
大家知道吗?一个智能合约是一套以数字形式定义的承诺(promises),包括合约参与方可以在上面执行这些承诺的协议。一旦节点执行了这个代码,合约就会更新总账(ledger)。
以太坊联合创始人Vitalik Buterin表示,很多人误用了智能合约,智能合约的正确使用方式应该是将其视为经济机制,用于制定规则,使不同的参与者可以更好地交流互动。例如有这样一种资金代管的想法,认为如果双方存在争议,两个人的资金都会被销毁。听着很苛刻,但它确实为当事双方诚实行事提供了强大的动力。
区块链技术在支持可编程合约时候,还具有去中心化、不可篡改、过程透明可追踪等特征,天然适合于智能合约。智能合约可以被自动地、无需信任地和公正地执行。在合约制定,履行和强制执行过程中取消中间人。智能合约就像一个多米诺骨牌,你需要上一个事件,来执行下一个事件。智能合约不用担心系统在条件被满足时不执行合约;然后就是去中心的不能篡改和全网备份,完备的记录完全可以支持支持事后的审计。
从用户角度来讲,智能合约通常被认为是一个自动担保账户,例如,当特定的条件满足时,程序就会释放和转移资金。
从技术角度来讲,智能合约是架设在区块链上。从而可以在其上面运行特定的合约程序。智能合约不依赖某个特定的硬件设备。
条件
智能合约就是有几个条件:
1.必须有价值符号参与。
2.资产必须数字化,而且有唯一的映射关系。
3.资产必须联网且绝对信任某个数据库。
总之,智能合约它必须是智能的,自动化的,不需要人来执行的,合约的执行是自动触发的。
特征
无需信任
无需信任是智能合约的关键特征。智能合约其不同之处在于合约的所有条款都是由计算机代码评估和执行的,这使得它无需任何信用背书。
图灵完备性
代码的执行是自动的:要么成功执行,或者所有的状态变化都撤消---在区块链环境中,这尤为重要,因为没有办法来撤消执行错误所带来的不好的后果。
2009年,比特币就开始用Script的语言来拟定智能合约。事实上,智能合约追溯到1995年,这样看要早于比特币。比特币的智能合约语言同以太坊版本的区别在于以太坊的语言具有图灵完备性。 以太坊的Solidity语言允许更复杂的合约,其代价是会增加分析难度,当然安全度也受到了考验。比特币粗暴德放弃图灵完备性。 执行层面更容易列举和检查。
以太坊DAO事件导致了区块崩溃----正在利用智能合约中的瑕疵获利的人是存在的。区块链安全公司PeckShield近日发现一种新型的智能合约安全漏洞evilReflex,攻击者可通过公开的接口窃取合约地址账户中存放的Token。
智能合约工作原理
开发人员会为智能合约撰写代码。智能合约可用于交易和(或)两方/多方之间的任何交换行为。一旦编码完成,智能合约就会被上传到区块链网络上,即它们被发送到所有连接到网络的设备上。然后更新数据库以记录合约的执行情况,并监督合约的条款以检查合规性。这样一来,单独一方就无法操纵合约,因为对智能合约执行的控制权不在任何单独一方的手中。
场景
数字身份;
允许用户账户信息与企业共享,用户可以有决定权。
证券;
简化资本表管理,能够绕开证券保管链中的中间人,便于自动支付股息,股票分割和债务管理,同时,降低了操作风险。
抵押;
智能合约链接各方来完成合同的执行。
贸易金融;
自动化信用证和贸易支付流程,提高各方的融资效率。
智能合约面临的问题
智能合约目前还处在初级阶段,尚未有任何实质进展。关键问题是信任度的问题。
合约可能有漏洞,能够转移证券,但却无法转移货币。
在现实生活中,这些事情可以通过中心化的系统来撤消。但是如果是去中心化的系统,则只能自己承担风险。
同样地,也有欺诈的问题:某人需要设计(编程)合约,在合约设计时就会需要确保没有欺诈的问题。
至少参与者要确保:
高层级(例如Solidity)的代码中需要充分描述合约参与方的目的
代码中的字节码实际上相当于高层级的代码,需要在进入合约之前进行审核。
井通区块链智能合约的基础
国际唯一分层(5层)的区块链底层技术
对应于TCP/IP网络协议架构分层,井通区块链信任栈通过5个层次:网络层、区块层、数据层、价值层以及合约层,保障了区块链可信任的特点在整个架构里各层次的覆盖,从底层有效保护数据安全,每一个层次都可以为一定的应用服务,满足不同的应用的需求,为个人或企业快速安全的实现各种应用场景和商业模式提供保障。区块链的发展成熟是也是多层次的发展成熟,不是一个单一的成熟路径。区块链本身基于分层设计,每一个层次的成熟度不一样,可以根据每个层次的成熟情况,推出相应的区块链产品。
底层平台分层设计
对应于TCP/IP网络协议架构分层,将区块链底层平台分为网络层,数据层,价值层,合约层,各层相互协同。
TX层--底层系统称为TX层,负责处理最基本的TX,合约层:在TX层之上增加一个合约层,负责处理合约。
合约要素分层管理:合约的要素(code,state,storage,transaction)transaction的执行下传到TX层,其他部分的执行在合约层实现。合约的执行速度和TX层的ledgerclose的速度去耦合。合约的状态变化可以以合约节点的共识速度完成。
共识节点中引入分片技术
对每个交易自动随机选择处理此交易的节点。利用了众多节点的处理能力,同时维持足够的容错空间;“规划”网络间信息流量,提高网络的整体效率。
用户可以标识需要的合约节点个数和共识达成的条件。创建合约时,一方面用户可以灵活控制付出的花费和可靠性之间的平衡,另一方面使得合约层能够更加高效的处理更多的合约。
基于智能合约的快速交易可以看成是一个分片技术的特例。从更通用的概念讲,对智能合约执行节点的选择性执行,就是一个分片技术的实现。
除以上所述的快速交易外,如果多个智能合约节点之间通过预定义的协议(BFT)来实现之间的信息同步,那么他们之间就实现了一个BFT的共识。当然,采用这样的公识之后,对智能合约的处理效率会降低,但是比通常的全部节点同时处理一个合约的情况,仍然大大提高了。
共识节点外概率抽样
保障合约系统的安全性。
井通区块链采用自主产权的智能合约体系
A,自有知识产权的具备高效自适应特征的随机BFT共识算法保证交易的连续性和可溯源性。
B,井通区块链实现全球首个异步合约调用以及亚秒级拜占庭容错的快速合约调用,不会阻塞系统共识和其他创异步调用合约机制。
C,支持智能合约的授权访问控制,满足不同应用的数据安全性要求。
D,设计自动触发的合约执行,让合约具有更强大的应用价值,提供真实的智能合约。
E,井通智能合约具有类似于闪电网络的快速秒级确认功能。
井通公链智能合约创新:分层实现+异步调用
智能合约指合约的编写可以通过代码的形式预先编写。一旦代码运行,执行无法干预。为了实现智能合约的功能,通常需要在共识机制里面添加支持。一般实现的方式可以是脚本语言或者是图灵完备的程序语言。后者通常需要单独的虚拟机执行来隔绝与其他模块的相关性。以太坊主要特色是支持图灵完备的智能合约。它采用了POW的共识方式,加快了区块生成的速度,并通过vm来执行合约,使得合约的执行也能修改共识的输出。
a) 我们采用TX驱动的做法,合约的创建,合约功能的调用,都由TX发起,如果执行的过程中需要修改用户的余额,则会发起交易并发到下层的TX,所有这些交易都将在TX执行验证并记录在底层的区块链中
b)TX层的交易不受合约的影响
c)TX层的跟合约相关的交易以单独的TX的方式保存合约的代码和状态,合约的具体状态对应于对合约相关功能的调用及参数,TX层的状态hash保证信息的一致性。
d)合约层的执行由多个合约节点contractvalidator执行,以确定性的方式分别执行并进行共识
e)每个合约节点采用VM执行代码。
f)合约节点保存合约执行的storage在这样的分层设计下,我们进一步优化了井通系统,使得合约的调用采用异步的方式,在此基础上,实现合约的快速调用和返回,同时支持用户选择分片的方式来执行智能合约,不需要所有的节点都做同样的事情,提高了整个系统的处理能力。
智能合约的异步调用
现有的智能合约的执行采用同步方式,利用交易触发或者自动触发合约调用,合约在具体执行的时候,区块链的共识机制必须等待合约执行完,返回结果后才能继续操作,从而完成对当前区块的共识。
这样的智能合约执行方式具有以下缺陷:
(1)合约执行的速度严重影响区块生成的时间:
因为区块共识依赖于合约执行的结果,每个节点必须对合约的结果的一致性达成共识,因此,合约的执行速度的快慢,直接影响区块后续操作,导致区块生成时间的延迟。
(2)合约执行的速度严重影响区块链能够支持的合约执行并发量:
在区块链生成的频率通常大致固定的情况下,在同样的时间段内,一个合约执行的快慢,将直接影响到同区块其他合约的执行,极端情况下,一个恶意的合约可能导致系统无法处理其他的合约,导致处理合约的并发量大大降低。
(3)合约执行过程中的容错能力受限:
由于采用同步执行的方式,合约执行时针对各种错误情况的处理需要全面考虑,并且实现对各种时间敏感的操作的快速处理,比如需要对各种操作的超时情况作相应的处理。
一些现有的解决方案,如以太坊,采用GAS的方式,对每个合约进行运算量的估算,并且利用一个系统总GAS量来控制当前区块能支持的总运算量,来保证共识的按时完成。但是系统能支持的合约总数受到这个总量GAS的限制,如果合约的代码越来越复杂,整个系统能支持的合约数就越来越少;另外,以太坊共识时间有限,GAS的最高值并不能大幅增加。
跨区块异步调用合约系统
目标:
该系统的区块共识不依赖于合约执行结果,可提高合约执行的并发量以及区块能支持的合约数量,提高系统容错能力。
优势
井通的区块链系统以异步调用作为后台核心技术,与现有智能合约执行技术相比具有以下优势:
(1) 隔绝了合约执行和系统共识单元,合约的执行可以在远端,使得合约的执行不再占有系统共识的资源;
(2) 合约执行单元和系统共识单元的去耦合,使得合约执行模块和共识模块相对独立,支持热插拔;
(3)在共识验证单元和合约执行单元之间设立合约执行缓存单元,在整个合约执行过程中创造性地采用了异步调用执行方式,使得合约的调用和执行结果在跨区(区块i和区块(i+k)之间分别实现,同时又能保证各个验证节点之间完成共识;该种合约异25步调用执行模式提高了合约执行的并发量,共识的过程无需要等待合约的执行结果,大大提高了区块能支持的合约数量。
(4)高了整个系统的容错能力,一方面系统可以设置合适的超时处理机制来处理合约延时的情况,另一方面,用户可以在合约调用中配置合适的k值来保证长时执行的合约得到正确处理。
单元
井通的异步调用合约系统,包括以下单元:
1. 分布式系统验证单元:包括一个或多个服务节点以及若干个验证节点,用于接收用户递交的交易请求集合{TX},包括合约调用请求TX和支付请求TX;
2. 2.分布式合约执行单元:位于本地或远端的分布式系统验证单元,与分布式系统验证单元之间通过预定义协议进行通讯,用以获取合约执行所需信息,并在合约执行完毕后,将结果返回至验证节点;
3. 合约执行缓存单元:包括用于接收来自验证节点的合约调用请求,发送合约调用请求至分布式合约执行单元,接收合约执行结果,返回当前合约执行状态至验证节点,以实现合约的异步调用;
实现方法
服务节点接收用户递交的交易请求TX,每个验证节点收集上述TX并汇集成交易请求集合{TX}i;
1. {TX}i中包含的合约调用请求发送至合约执行缓存单元,合约执行缓存单元在收到上述请求后立即返回当前合约执行状态;
2. 在所有验证节点收到{TX}i后,{TX}i在所有验证节点完成共识,区块i生成,验证节点对共识后的{TX}i进行验证,验证后的状态写入区块i;同时每个验证节点创建一个查询合约TXq,并将其加入到区块(i+k)的交易请求集合{TX}(i+k)中;
3. 在进行1~2时,合约执行缓存单元采用异步调用的方式将合约调用请求发送至分布式合约执行单元,于后台执行合约,执行完毕后,合约执行缓存单元获得合约执行的最后结果,等待处理;
4. 区块(i+k)处理周期开始,{TX}(i+k)中包含的合约调用请求发送至合约执行缓存单元,合约执行缓存单元立即返回当前合约执行状态,同时,验证节点从查询合约TXq中取出合约相关信息,并向合约执行缓存单元发出查询请求,合约执行缓存单元向验证节点返回区块i的合约调用请求的执行结果,并更新查询合约TXq;
5. 在所有验证节点收到{TX}(i+k)后,更新后的查询合约TXq和{TX}(i+k)合在一起形成一个新的集合,在所有验证节点完成共识,区块(i+k)生成,验证节点对共识过的TX进行验证,验证后的状态写入区块(i+k)。
基于智能合约的快速交易
缺陷
现有基于区块链的分布式交易方式因区块链共识方式、区块链生成时间、区块的生成时间、区块的大小而受到很大的限制。
基于区块链的交易速度一般都在秒级、甚至分钟级以上,此外,还存在如下缺陷:
1.交易请求在分布式系统中的传播过程存在延迟,从某个发起节点到信息传播至其他所有节点之间存在信息延迟;2.共识过程存在时间延迟:数据的更新必须在共识完成后才能写入账本中,这种写入是间歇性的,每个验证周期更新一次,用户对数据更新的请求必须在更新周期之后才能得到响应并返回;3.现有的基于智能合约不仅受到以上两点的影响,还受到合约执行延迟的影响。
一些现有的解决方案,如闪电网络、比特币网络采用通道的办法来加快对交易请求的处理,但上述方案的协议或者比较复杂,或者采用了非拜占庭容错的方式,限制了其更广泛的应用。
井通公链方案:基于区块链合约的快速交易系统
在异步调用合约的基础上,对合约节点分成两种:普通合约节点和快速交易合约节点。普通交易合约节点与验证节点之间通过预定义协议进行通讯,获取合约执行所需信息,合约执行完毕后,将结果返回至验证节点;快速交易合约节点执行快速交易请求并将执行结果返回至合约接入服务器。
目标
井通系统分为独立的合约层和底层共识层,快速交易对合约层发起调用,在合约层实现快速交易,其快速执行结果周期性或非周期性返回底层共识层进行验证确认并写入区块链,使得交易的执行28不受区块关闭的时间和区块大小的影响,也不受分布式网络传递的影响,同时具备分布式区块链固有的优点,克服了现有区块链交易方式在交易传播、共识过程以及和合约执行过程中存在的延迟现象,以接近实时的方式实现对交易的快速支持,维持了交易系统的拜占庭容错性,可实现对交易细节的隐藏和加密,同时保持了分布式系统的数据的一致性和完整性。
实现方法
快速调用的具体实现方法如下:
(1)快速交易初始化:
两个或多个需实现快速交易的用户之间达成一致并创建一个合约,发起一个快速交易初始化请求tx,合约接入服务器经服务节点将该tx发送至验证节点形成交易集,验证节点对该交易集进行共识;完成共识后,验证节点将该交易集发送所有合约节点,依据预定义协议通过分布式随机算法在其中随机且确定性地选取一个快速交易合约节点;
(2)快速交易实现:
用户发起快速交易执行请求,合约接入服务器经服务节点将该请求发送至快速交易合约节点,于该节点执行交易请求,直接返回快27速交易结果至合约接入服务器,同时该服务器记录交易状态,并保存自上一次确认后的所有快速交易历史;该快速交易合约节点的交易执行方式可以通过非对称加密方式或者其他方式(例如对称加密方式)运行,使得合约/交易的执行是保密的,仅对用户和当前合约节点可见。
用户可通过合约接入服务器查询交易的历史记录;
(3)快速交易历史的分布式确认:
用户可在各方签名验证的情况下,对可未确认的交易主动周期(比如10分钟、1天、1周)或非周期性发起确认交易请求tx,也可以根据实现定义的合约定时对发起确认交易请求tx;发起的确认交易请求tx与上述未确认的交易历史合并,产生一个自上次确认后到当前状态的变换交易;合约接入服务器经服务节点将该变换交易发送至验证节点,验证节点对交易集进行共识,再将其发送至所有合约节点进行合约执行,合约执行结果经验证节点验证并确认,与其他交易信息(普通交易或普通合约执行信息)一起写入区块链,同时该合约执行结果返回给客户,通过共识节点对历史交易记录进行确认,从而实现交易确认的拜占庭容错。
当用户重复步骤(2),选取下一个快速交易合约节点后,原来的快速交易合约节点的交易历史将被清空。