公众号回复“1”,拉你进区块链技术讨论微信群
作者:Yuren Ju
文章来源:台北以太坊社区
原文标题:工程师视角:什么是区块链的smart contract
本文约3100字+,阅读(观看)需要20分钟
投入区块链社群以及产业一小段时间了,跟工程师朋友们聊到区块链的去中心化架构时,朋友们多半是一头雾水。今天想试著透过工程师们比较容易理解的角度来解释一下区块链领域经常被提到的一个名词:Smart Contract (智慧合约或译作智能合约)。希望有助于工程师朋友们了解区块链技术。
先提醒一下以下的内容解释的都是针对 Ethereum (以太坊) 区块链,其他的区块链不见得有 Smart Contract 的概念。
一般的程序如何被执行?
开始解释 Smart Contract 前想来聊聊更基本的事情:一段程式是怎麽被执行的。当你写了一段 Java、Python 或是 JavaScript 的程式,它会怎麽被执行呢?
假设我们在写一个卖票程序,可能会需要一个 MeetupEvent 的类别 (Class),内容如下:
https://gist.github.com/yurenju/284cfb127a8ba9de07eb8e007acca317
这段 Java 程式的执行方式,一般来说源码会经过 Java 编译器转译成 Bytecode 之后,透过 JVM (Java Virtual Machine) 在电脑中执行。当这个程式在执行时 main() 将会建立一个类别的 instance event,此时这个 instance 将会储存在记忆体裡面,并且可以透过我们定义的方法如 register()操作这个 instance,直到整个程序结束。
不管是写 Java, Python, JavaScript 或其他较为高阶的语言,实作上的细节根据不同程式语言会有差异,但是大致上的情形都会是这样,相信工程师们对这样的运作架构也耳熟能详。
Smart Contract
让我们再回到我们的主题:什麽是 Smart Contract 呢?Smart Contract 名字上听起来很玄,如果你是第一次接触区块链的工程师,其实:
Smart Contract 就是一个运行在区块链 VM 上面的 instance。
更精确地来说,在 Ethereum Blockchain 上面 Smart Contract 运作在 Ethereum Virtual Machine (EVM)上面。同样的 MeetupEvent,我们改用 Smart Contract 的程式语言 solidity 重写一次:
https://gist.github.com/yurenju/8598564c516facd734834a51df3fc191
在区块链上所有人都可以呼叫这个 smart contract 所开出来的函式 (function)。当然因为它就是一段程序,你也可以写些逻辑来做权限控管。以我们这个程式的例子,可以执行的函式就是 register()。这样说起来,除了 Smart Contract 是跑在区块链上以外,其实他就是一个 instance,跟使用其他程式语言上的 class instance 没有太大的差别。
而区块链 VM 上跑的程序(也就是 Smart Contract)跟一般 VM 上跑的程序,最不一样的地方就在于去中心化架构。
在一般程序的架构中,不管那个服务用了分散式运算、load balance 加上多台伺服器或是只在一台机器上面跑,本质上这些伺服器(或说是运算单元)全部都是由单一组织掌管,这样的架构行之有年,也运作得很好。但这样的架构下,如果你需要做任何「价值交换」的应用,免不了都要中间人的介入。
在以前只能当面交易的年代,所有东西都是一手交钱一手交货。需要更方便与有效率的交易时,出现了掮客帮你转交物品跟金钱的行业,当然这位中间人需要取得双方的信任。
最终银行、信用卡公司、金流公司类似的概念逐渐兴起,使用者也需要信任银行或信用卡公司时,这样的模式才行得通,而搭建在上面的「信任」是国家透过合约、法律约束各式各样的公司,一层一层的信任关系就这样搭建起来。
你跟网路上的某人交易可以成功,其实背后是一层层的中间人与信任关系。
回到最根本之上,就是「信任」问题。而区块链与 Smart Contract 则是试图透过去中心化的架构来解决这问题。
不同于一般程序的中心化架构,在 Ethereum 区块链中,如果你想要透过协助别人执行他们的 Smart Contract 获得奖励,你可以安装 ethereum node 的软体如 go-ethereum 或是 parity,并且开启矿工模式即可。要成为一个矿工并不需要经过谁的同意,而当矿工在 Ethereum 区块链会有挖矿奖励回馈以及使用者给矿工的交易费。
如此一来 Ethereum 的去中心化节点网路就这样建构起来了。当你部署一个 Smart Contract,或是发起一笔交易来改变区块链内的状态时,会需要付出交易费,这笔交易费最终则会由矿工收走作为奖励之一。
更棒的是 Ethereum 区块链是一个内建数位货币金流的平台,开发者可以非常容易的利用在区块链上内建的数位货币金流系统来搭建各式各样的去中心化应用 (Decentralized app, Dapp)。
你跟网路上的某人交易时,如果透过 Smart Contract 双方先压了一笔保证金在合约裡面,是不是就可以在没有中间人担保的状况下让确认交易可以执行呢?内建数位货币金流系统,搭配上公开的 Smart Contract 内容(也就是源码),以前透过现实生活的「合约」来解决的信任问题,就可以重新思考是否可以透过 Smart Contract 解决。
话说回来,区块链跟 Smart Contract 都还在非常早期的发展,说不定现在发现的问题比解决的问题还要多(笑)。我不觉得区块链是银弹,突然之间就可以解决以往庞大複杂的问题。不过我真的很期待去中心化的思维可以回头来思考我们已经做过的服务,有哪些可以再透过去中心化架构,提出新的解决方案。
文章发布只为分享区块链技术内容,版权归原作者所有,观点仅代表作者本人,绝不代表区块链兄弟赞同其观点或证实其描述。
领取专属 10元无门槛券
私享最新 技术干货