什么是智能合约(Smart Contract)?

崔嘉轩
崔嘉轩 2017-09-29 23:15
3 34725
摘要: 智能合约是什么? 在区块链上运行的程序,通常称为智能合约(Smart Contract)。所以通常会把写区块链程序改称写智能合约。虽然比特币(Bitcoin)上也能写智能合约,但是比特币所支持的语法仅与交易有关,能做的事情比较有限。

智能合约是什么?

在区块链上运行的程序,通常称为智能合约(Smart Contract)。所以通常会把写区块链程序改称写智能合约。虽然比特币(Bitcoin)上也能写智能合约,但是比特币所支持的语法仅与交易有关,能做的事情比较有限。因此目前提到写智能合约,通常指的是支持执行图灵完备程序的以太坊(Ethereum)区块链 。


智能合約可以做什麼?
目前最常见的智能合约是各种加密货币合约,开发者可以很容易地透过部署一个智能合约,来提供运行于以太坊上的新加密代币。如果这份智能合约相容于ERC20标准1,开发者不需要重新开发从挖矿到交易的整个代币生态系,你的新加密代币就可以直接使用支持支持以太坊的电子钱包来收送,大大降低了建立新加密代币的门槛。
智能合约也可以用来运作各种公开公正的自动服务机构(DAO,权力下放自治组织)。透过分散在全球各节点上运作的智能合约,所有运作与决策都是公开透明的,降低了交易的不确定性(不确定性)。


智能合约和一般程序程序的差异
以太坊智能合约确实有些和一般程序不同的特性,以下整理了四个不同点。
一、整合金流容易
一般的应用程序要整合金流是件非常不容易的事情而智能合约极容易整合金流系统(使用以太币或自行建立的新代币合约)。
二、部署时与后续写入时需费用
一般的应用程序需要提供网址让使用者下载,一般的网页应用程序也需要运行在伺服器上,开发者需要维持伺服器的运作以提供服务,这需要持续地花费(就算是免费的伺服器或网页空间,也是厂商自行吸收了费用),程序开始运作后,除了维持费用外不需额外的花费。
智能合约在部署时需要一笔费用,这笔费用将分给参与交易验证(挖矿)的人。而在合约部署成功后,合约会作为不可更改的区块链的一部分,分散地储存在全球各地以太坊的节点上。也因此,智能合约在部署后,并不需定期提供维持费用,同时查询已写入区块链的静态资料时也不需费用。只有在每次透过智能合约写入或读取计算结果时,需要提供一小笔交易费用。
三,储存资料的成本更高
一般的应用程序将资料储存在本机或伺服器上,需要资料时再从本机或伺服器上读取,而智能合约将资料储存在区块链上,储存资料所需的时间与成本相对昂贵。
四,部署后无法更改
一般的应用程序改版时可透过安装新版程序,网页应用程序也可透过部署新版程序达成,而智能合约一旦部署到区块链上后,就无法更改这个智能合约。当然聪明的开发者透过加入额外的智能合约,也已有办法绕过智能合约部署后无法再更改的限制。


如何编写智能合约?
Ethereum上的智能合约需要使用solidity语言来编写。之前还有其他能用来编写智能合约的语言如Serpent(类的Python),LLL(类的Fortran),但目前看到所有公开的智能合约都是使用solidity编写。官方宣传上说solidity是一种类似的JavaScript的语言,而且围绕着JavaScript的各种开发工具链都是使用属于使用Javascript生态系的NPM来提供的。


将智能合约部署到区块链的流程
写好solidity代码(.sol)后,需要先将程序代码编译(编译)成EVM(Ethereum Virtual Machine)能读懂的二进制度Contract ByteCode,才能部署到Ethereum的区块链上执行。部署到区块链上的合约会有一个和钱包地址(地址)一样格式的合约地址(Contract Address)。
2
部署后智能合约可自动执行。后续呼叫智能合约的时候,使用者可以使用部署合约的钱包地址(所有者帐户),或依据编写的智能合约条件,让其他钱包地址也能呼叫这个智能合约。 呼叫智能合约,其实就是向这个合约地址发起交易,只是交易的不只是代币,而可以是智能合约提供的呼叫方法。
智能合约范例
3条回应 最新 最早
崔嘉轩
沙发# 崔嘉轩 九级码农 2017-09-29 23:17
转载自:https://yq.aliyun.com/articles/211899
熊圆
板凳# 熊圆 2017-10-11 11:26
所以通常会把写区块链程序改称写智能合约
为梦想为你为青春
地板# 为梦想为你为青春 2017-11-07 11:42
但目前看到所有公开的智能合约都是使用
杨蓉
4楼# 杨蓉 2017-12-08 10:08
以太坊智能合约确实有些和一般程序不同的特性
游客
登录后才可以回帖,登录 或者 注册