从用户角度来讲,智能合约通常被认为是一个自动担保账户,例如,当特定的条件满足时,程序就会释放和转移资金。
从技术角度来讲,智能合约被认为是网络服务器,只是这些服务器并不是使用IP地址架设在互联网上,而是架设在区块链上。从而可以在其上面运行特定的合约程序。
但是与网络服务器不同的是,所有人都可以看到智能合约,因为这些智能合约的代码和状态都在区块链上(假设区块链是公开的)。而且,与网络服务器不同的是,智能合约不依赖某个特定的硬件设备,事实上,智能合约的代码由所有参与挖矿的设备来执行(这也意味着进入单个合约的算力是有限的,尽管挖矿难度的自动调整会调节这种影响)。
智能合约是编程在区块链上的汇编语言。通常人们不会自己写字节码,但是会从更高级的语言来编译它,例如用Solidity,与Javascript类似的专用语言。这些字节码确实给区块链的功能性提供了指引,因此代码可以很容易与它进行交互,例如转移密码学货币和记录事件。
代码的执行是自动的:要么成功执行,或者所有的状态变化都撤销(包括从当前失败的合约中已经送或接收的信息。)这是很重要的,因为它避免了合约部分执行的情况(例如,在证券购买交易中,证券所有者已经转移发送了证券,但是密码学货币的支付转移却失败了)。在区块链环境中,这尤为重要,因为没有办法来撤销执行错误所带来的不好的后果(而且如果对手不配合的话,根本就没有办法逆转交易)。
下面这个示意图就是一个智能合约模型:一段代码(智能合约),被部署在分享的、复制的账本上,它可以维持自己的状态,控制自己的资产和对接收到的外界信息或者资产进行回应。
什么是智能合约
智能合约模型:它是运行在可复制、共享的账本上的计算机程序,可以处理信息,接收、储存和发送价值。
智能合约可能用在哪些领域
证券登记和清算。银行现有账户衍生产品预付款和再充值智能合约面临的问题
智能合约目前还处在初级阶段,尚未有任何实质进展。关键问题是信任度的问题,这与影响区块链实施的问题类似:这些系统都设计成了无需信任的环境,这意味着无法改正出现的错误。例如,在区块链中,如果你将货币发送给某个地址,这个操作是无法撤销的。因此,如果你与欺诈者进行交易 – 或者你已经将货币发送到错误的地址中 – 那么金钱损失是无法挽回的。
智能合约能够转移欺诈对手的问题 – 事实上,这就是智能合约设计的原因之一:无论何时,合约都能能够可靠地监控合约中参与方的执行情况,参与方是无法进行欺骗的。
然而,问题并没有解决,只不过是出现在了新的层级:例如,合约可能有漏洞,能够转移证券,但却无法转移货币。
同样地,也有欺诈的问题:某人需要设计(编程)合约,在合约设计时就会需要确保没有欺诈的问题。至少参与者要确保:
高层级(例如Solidity)的代码中需要充分描述合约参与方的目的代码中的字节码实际上相当于高层级的代码,需要在进入合约之前进行审核合约信息需要很好地理解,以避免出现乌龙指操作(例如,人们用错误的报价方式-例如USD/ERU而不是EUR/USD-这会导致严重损失。在现实生活中,上述的这些问题原则上都可以在事后进行处理解决,如果需要的话,还可以通过法院,但是在无需信任的工作量证明区块链中这是不可能的:问题是为什么人们想要依赖一个工作量证明系统(背后的原理是浪费大量的能源来挖矿,这样的话攻击这个系统在经济上是不划算的)而不是使用一个中心化运行的公开账本和依赖中心化的权力机构 – 政府、法院等 – 来执行合约。