正文
所以我们开始讲这些事情的时候,会牵扯到社会扩容,社会的扩容是需要成本的,我们需要有政府,需要有法院,需要有警察机构。上图中我们可以看到OECD政府的GDP占比是从36%到58%不等。我们虽然没有买单、没有直接的去支付这些成本,但是实际上这些东西在政府开销上占了很大比重。那区块链做的事情他是因为取代信任的机制,即以计算机替代人工成为核心的概念。所以说智能合约他具体就是一个计算机程序,它来替代靠人工运营的这些机构。
智能合约具体是什么
接下来我们可看一下智能合约具体是什么东西。第一个例子就是亚马逊的 LAMBDA 服务,LAMBDA一个特性是你在LAMBDA这个平台写程序的时候,你只是去写你的业务逻辑,而这个业务逻辑你直接上传到 LAMBDA 平台上面,好像只是一个服务器的回调。只要有请求进来它就调用这个回调,计算完成后就直接终止了,你要自己去部署一个服务器,没有逻辑。LAMBDA 这个平台让你直接把服务器的这个业务逻辑放在平台上面,完全不用去管后面对应哪些具体服务器,一有请求进来,并把 LAMBDA 启动,这个跟智能合约的架构非常像。
我们可以看一个较为简单的例子,这个计数器的业务逻辑很简单,这边有一个COUNT,把它想成数据库里的数据,这个合约有数据也有业务逻辑,这个业务逻辑要做的事情就是把这个数字递增。当外部调用这个递增的时候,它去数据库里面修改这个COUNT这个变量,这个就是你的智能合约,从概念上来讲也没有什么,它之所以牛逼是因为我们用去中心化的网络去同意了这个数据应该是什么,我们具体接下来看一个更好的例子。
我们把这个合约的这些变量理解成一个数据库,我们可能平常在写一个加法的类型,它只是存在于类型里面,你的假若死掉了,这个内存就清空了。在智能合约里面,虽然它是变量,但是你是写在链上面,而这个数据库恰巧是特别昂贵的数据库。我们类比成 Java 的伪代码,我们会想象后面每一个合约它有一个相对应的数据存储,它是一个对象,是一个数据库,在这个方法里面刚才讲了递增的方法,它只是去操作这个数据库,在这个键修改它里面的值,所以你每次去改一个变量其实是对数据库做一个操作,而且这个操作是特别昂贵的操作,可以给一个概念,普通所有的这些指定是要费用的,普通的一个纸币,比如说加减乘除,大概是2到5个不等,存储的话是2万个,大概算是5000倍的倍增。
我们看一个更完整的例子,功德香火链,这个例子大概介绍了智能合约非常本质的一个东西。为什么要写智能合约,我们并不是只是为了写这个数据,他之所以牛逼是因为他里面有金融属性,大家可以相信你,如果在我自己的亚马逊 LAMBDA 上搞一个功德香火链是没有人相信的,我在数据库里面可以随便修改,但如果我们改成在智能合约中就变成是一个去中心化、不需要信任的一个程序。
大家来看一下这个东西,有一些需求,他初始化的时候我们要设定管理员,任何人我们都允许他捐款,最后要用这个款项的时候我们允许管理员取款,然后让他写出所有取款他的去处去了哪里。
这个就是我们整个智能合约的代码,就十几行而已,这上面大概有两点需要留意,有合约属性,拥有者的姓名,我们会用这个属性来存储他的管理员,我们控制了管理员权限才可以进行修改。下方分别是捐款和取款的函数,我们接下来把这两个函数分开讲解。
初始化设定管理员,所以说这边我们是要把数据存起来,我们要知道谁是管理员,在创建这个合约的时候它是用一笔交易创建的,即有一个钱包去付钱然后去说这笔交易谁创建的。这里的属性指出当前用户的身份,这一笔交易的操作者以及合约的操作者。我们这边做的事情很简单,在创建这个合约的时候我们把当前的操作者存储在这个数据库里面,有了这个东西之后我们就可以验证正在操作的人是不是管理员。