极简入门:什么是智能合约?
「智能合约」一词是由Nick Szabo在1997年首次提出的,比比特币的出现要早很多。他是位计算机科学家、法学学者,还是个密码译解专家,所以我还是替他跟你「讲人话」好了。
简而言之:他想用分布式记账技术来保存合同。如今的智能合同,就如现实世界中的合同一样。唯一的区别只不过是它们完全是数码形态的。事实上,一个智能合同,其实只是存储在区块链中的一个小小的计算机程序。
智能合同如何工作?
那咱们举个例子来看看智能合同是如何运作的。你可能听说过众筹鼻祖Kickstarter。如果各团队想要制造某种产品,他们可以上Kickstarter网站,建立项目内容,制定资金筹集目标,然后就可以开始等着从那些相信他们理念的人们那里收钱就可以了。
Kickstarter说到底是一个处在产品产出团队和资金支持者之间的第三方。这就是说,双方都只得相信Kickstarter能正确的按照他们的意愿处理他们的钱。如果某个项目成功地筹到了钱,产品项目方就应该从Kickstarter那里拿到这笔钱。在资金支持者那方面,如果款子筹齐了,他们要求钱可以给到项目方。如果款子最终没筹齐,则应该被退还给他们。项目方和资金方都只得信任Kickstarter。
但有了智能合同,我们就不需要类似Kickstarter这样的第三方,也可以建立类似系统了。那么我们就来做一个智能合同来看看。
我们用编程设定这个智能合同必须持有所有收到的款项,直到达到已设定的目标款项。这些对项目投资的人,就可以把他们的钱转到这个智能合同里。如果本项目达到要筹集的目标值,智能合同就自动的把钱转给项目设立人。反之,如果项目最终没有达到筹集资金的目标值,这笔钱又会自动的转回给资金支持者们。挺厉害的吧!
而且,由于智能合同是存储于区块链当中的,因此所有信息都是分布式的用这个技术,没人能对这笔钱说了算。
智能合同真的安全吗?
诶,等下!可我们凭什么相信智能合同啊?
那是正是由于智能合同是存储在区块链上的,它们因此而自然具有的一些有趣的属性,即不可更改性和分布式的特性。
不可更改性是指,智能合同一旦成立,则不可被更改。因此,没人能背着你篡改你智能合同里的代码。而分布式的特性是指,智能合同输出的结果是被所在网络中所有的人确认过的。因此,单个人是无法强迫智能合同放款的。因为所在网络的其他人一定会发现这企图,然后标记此行为无效。篡改智能合同几乎成为不可能。
不仅是众筹,智能合同的应用可以涉及很多领域。银行可以用智能合同放贷或自动付款。保险公司可以用智能合同来处理一部分索赔。邮递公司可以用它来做到付等。
看到这里,我相信你应该知道智能合同到底是什么了吧。
目前,只有几个支持智能合同的区块链,其中一个就是以太坊。它的成立、设计,都是专门针对支持智能合同的。编辑这些智能合同使用的是特别的编程语言,Solidity 这个编程语言是专为以太坊创设的,其语法类似于JavaScript。值得注意的是,比特币也支持智能合同,尽管它相对以太坊而言还是非常有限的。
智能合约的应用平台:以太坊
以太坊(Ethereum)是一个开源的有智能合约功能的公共区块链平台。从这个对于以太坊的定义中,我们可以得出几个关键词。第一,以太坊是一个区块链。第二,以太坊具有智能合约功能。所以简单地说,使用以太坊可以让我们快速地起草以一份智能合约。
要使用以太坊起草智能合约,首先需要下载一个叫做「Ethereum Wallet」的应用程序,可以通过下面的链接获取:Releases · ethereum/mist · GitHub
当安装完成之后,该应用程序会自动下载以太坊区块链的所有节点,将其存储在本地。截止到我写这篇文章的时候,一共有577万个区块,这份数据大概有2G的大小,所以可能会消耗比较长的下载时间。
下载完成之后,通过「File」-> 「New Account」菜单创建一个以太坊的账号。
创建账号之后记得备份一下 keystore 文件夹,这个相当于一个秘钥。这个没有了,你里面的所有财产可就都没了。
账号创建完成之后,点击进入账号,可以看到账号的相关信息。
点击「create a wallet contract」再创建一个「以太坊钱包」。
这里我选择了「SINGLE OWNER ACCOUNT」,点击「Create」之后会进入创建合同页面。它需要你输入账号密码进行交易。我们输入密码之后点击「SEND TRANSACTION」进行交易。
正常来说会提示你没有足够的资金可以创建合同。
这是因为创建合同是需要消耗计算能力的,而计算能力是一种资源。在以太坊中,我们用以太币来描述这种资源的价值。到了这里,如果你还想继续玩一玩以太坊,那么你需要自己有一条机器去挖矿或者用我们的人民币去购买。
下一篇文章,我们将说说如何挖矿获取以太币。