只有结合了区块链技术、分布式记账技术的代码合约才可以被视为真正的智能合约,而该合约的核心则是区块链技术。区块链技术具体表现为一种“开放的分布式数据库”,该技术使得该合约可以在一种完全公开、透明和不可被篡改的环境中运行。在这种环境的理想运作下,合约双方不再需要特定的企业来担任中间商或担保机构,所有交易都是公开透明的,即实现了“去中心化”、“去信任化”的目标。
// 计算出请求的时间戳 uint32 target = time - secondsAgo; // 计算出请求时间戳最近的两个 Oracle 数据 (Observation memory beforeOrAt, Observation memory atOrAfter) = getSurroundingObservations(self, time, target, tick, index, liquidity, cardinality); Oracle.Observation memory at; // 如果请求时间和返回的左侧时间戳吻合,那么可以直接使用 if (target == beforeOrAt.blockTimestamp) { at = beforeOrAt;
而智能合约是在区块链的保证信息传递的一致性、可信性和安全性基础上,把交易双方的合约写成程序,通过发布到以太坊网络上,通过编程语言来实现需要履行的合约,避免了因不履行合约而造成的人为冲突,简单有效的解决了违约的强制执行问题。
智能合约在执行过程中,没有一个中心化权威的第三方机构为其双方做担保,而是由一个写在整个网络上、所有人都能查看的公开的智能合约进行监督。而合约条款写在编程语言中,不存在歧义,双方不存在因为合同歧义而产生的毁约问题。但智能合约条款只能接受简单的因果标准判断,不适于应用在复杂的有多重衡量标准的事件判断中。
at = atOrAfter; } else { // 当请请求的时间在中间时,计算根据增长率计算出请求的时间点的 Oracle 值并返回 uint32 delta = atOrAfter.blockTimestamp - beforeOrAt.blockTimestamp; int24 tickDerived = int24((atOrAfter.tickCumulative - beforeOrAt.tickCumulative) / delta); uint128 liquidityDerived = uint128((atOrAfter.liquidityCumulative - beforeOrAt.liquidityCumulative) / delta); at = transform(beforeOrAt, target, tickDerived, liquidityDerived); } return (at.tickCumulative, at.liquidityCumulative);
在智能合约的概念模式如图,一般而言,智能合约封装预定义的若干状态、转换规则、触发条件以及应对操作等,经各方签署后以程序代码的形式附着在区块链数据上,经对等计算机网络传播和节点验证后记入各个节点的分布式账本中,区块链可以实时监控整个智能合约的状态,在核查外部数据源确认满足特定的触发条件后激活并执行合约。