首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

序列8 智能合约能自动触发吗?-智能合约平台的本质

在序列7的最后,我们抛出了一个问题:既然Message Call会改变WorldState,它又是调用过程中的1个临时对象,你没有在区块链里面持久化它,那怎么做到有据可查?

Message Call是被智能合约发起的,和上面这个问题类似的一个问题就是:既然Message Call是被智能合约发起,如果智能合约可以自动被触发,比如智能合约内部有个Timer,周期性的调用其他智能合约,改变WorldState,那情况不是更糟糕???

答案是智能合约不能自动触发!也就是说:智能合约不能自动的、周期性的,或者在未来某个时间点,自动触发,调用自己,或者调用别的智能合约!!!

所有的智能合约的执行,都是由外部的EOA通过发送Transaction触发的!

外部的EOA发送Transaction,给智能合约1;

智能合约1发送Message Call,给智能合约2;

智能合约2发送Message Call,给智能合约3。。

所有这从Transaction到Message Call的整个调用链,都算做在这个Transaction内部执行的!

而Transaction是被记录到区块链的,Transaction有据可查,也就保证了Message Call不可能随意调用,随意改变WorldState的状态。

智能合约平台的本质

用1个图来表示,就是下面这样:整个以太坊的智能合约平台,就是1个巨大的状态机。

这个状态机的输入就1笔笔的Transaction,每1笔Transaction都会导致状态机发生1次状态迁移。所有的Transaction,就相当于日志流水,持久化在区块链上面。根据Transaction 0 开始,可以计算出状态机的状态。

而合约的执行,合约之间的Message Call的调用,只是这个状态机的内部执行过程;它们导致的状态机的变化,最终都会算到这个输入的Transaction头上!!

一句话:所有的状态变化,最终都归结到1笔笔的Transaction。

Alarm Clock Contract

但上面的模型,也有个问题。如果智能合约想实现类似Timer的功能,周期性的调用其他智能合约,但没有Transaction的触发,就做不了这个事情。

为了解决这个问题,有人提出了Alarm Clock Contract。有兴趣的可以去下面的官网看一下它是怎么解决这个问题的,此处不再展开叙述。

http://docs.ethereum-alarm-clock.com/en/latest/introduction.html#what-problem-does-this-solve

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180609G01Q7100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券