2021区块链开发入门
在我大学的时候,除了学习网页前端之外,因为课程报告的需要接触到以太坊(Ethereum),于是开始学写智能合约,包括它使用的程序语言solidity。
工作以后鲜少再碰以太坊的相关技术,直到最近想重新把以太坊学起来,故而决定写这篇文章,让初次接触区块链与智能合约的人更好地进入开发者的世界。这篇文章不只面向开发者,同时也希望能够给对区块链有兴趣的人,指引一条清晰、务实且保守的学习路线。
关于区块链
区块链会被广为人知,无非是因为虚拟货币的出现,而虚拟货币的鼻祖就是比特币。在比特币出现以前,没有一个能够在全球网路上通用的数位货币;在比特币出现之后,才真的实现了数位化的货币,能够在全球网路上流通。
这样的技术性突破,blockchain的名字从比特币白皮书中被萃取出来,而这项技术也被更多人拿去做研发以及创新。
区块链这项技术的特性可以简单概括为两点:去中心化(decentralized)与不可窜改(immutable)。去中心化有程度上的差别,在公共网路上由世界各地的节点共同维护的区块链,去中心化程度较高;相较之下,私人企业开发由特定节点来验证交易的区块链,去中心化程度较低。
为什么是以太坊
这年头区块链三个字大行其道,大部分都是为区块链而区块链的商业炒作。容许我独断地说,以太坊才是区块链应用的大门。
以太坊是一个非营利组织,也是网路上最大的开源区块链专案。去逛逛以太坊的官网吧。
智能合约
在以太坊区块链中有所谓的智能合约,智能合约能够部属到以太坊区块链上,合约即程序代码,放到区块链上就不能再更新,只能执行合约上的程序,持有以太币的人能够与合约进行交易。把智能合约想像成是一台自动贩卖机,把钱(以太币)投进去,饮料会掉出来(合约上的程序会被执行)。
在现实生活中,签订合约的双方认为合约有效而且可以被信任,是因为有国家法律来保障,违反合约可能会受到法律制裁;而用以太币与智能合约互动,认为智能合约可以被信任,是因为智能合约的不可窜改性— 以太坊虚拟机会毫无偏袒、完全中立、冰冷不带任何感情地执行智能合约上已经写好的程序代码。
建立在智能合约之上的虚拟货币
事实上,以太坊扩大了区块链这项技术的应用层面。回头想想,比特币来自区块链技术,某个人若想打造一款同比特币一样的虚拟货币,就得模仿比特币去建造一个自己的虚拟货币区块链,一个区块链网路要能够有效运作并非易事,还需要节点、需要靠人挖矿去验证交易。此时,若使用以太坊的智能合约,撰写虚拟货币需要的程序代码,将合约部属到以太坊区块链上,叮咚!他就可以发行自己的虚拟货币,根本不必再去建造底层的区块链,也不用想挖不挖矿了。
此时会发现以太坊就像是一个区块链平台,你不需要亲手打造区块链网路,即可享有区块链去中心化与不可窜改的特性。与其他智能合约的开发者共同使用以太坊虚拟机EVM(Ethereum Virtual Machine),在EVM 上部属无上限个智能合约。
以太坊是一项基础建设,底层区块链帮你架设好,开发者便有更多时间去发想应用到网页、手机、或物连网设备上,以下是一段简单的智能合约,该合约创造了一个虚拟货币简称MAT…
直接进入开发领域— 线上编辑器Remix
Remix是开发智能合约的线上编辑器,进入Remix官网,点选Create New File以后,把上方程序代码复制贴上。在左侧栏位中有solidity compiler的选项,确认一下左侧栏第一列显示的版本,调成0.7.0 (上方程序代码使用的版本),就可以按下下方compile的按钮,将智能合约「编译」成bytecode(给机器读的语言)。
接着我们要部属合约到区块链上,首先到左侧栏位点选DEPLOY & RUN TRANSACTIONS 的选项,可以看到环境是javascript VM,这是指现在要部属到的测试用虚拟机。按下下方的按钮Deploy 即可将合约「部属」到javascript VM 上。成功部属后,你会发现ACCOUNT 所持有的以太币,从100 变成99.9999…,我们得知部属智能合约需要花费一点点以太币。
左侧下方会有Deployed Contracts,点开来就会列出合约上可供呼叫的函式,点那些函式就能与刚刚部属上去的智能合约进行互动了。
有些函式呼叫会引发交易,所以需要以太币,有些则不用。在ACCOUNT 的地方可以展开来,它提供许多的地址(address),也就是钱包,每个钱包里面预设给你100 颗以太币,试着用那些地址去操作智能合约,你就能慢慢体会什么是建立在以太坊之上的虚拟货币了。
真正的开发者世界
实际上开发智能合约只能算是以太坊开发的其中一部分,其他包括以太坊区块链扩容方案、节点验证等等又是另一个开发领域了,那部份我就没有研究太多。而智能合约的开发是比较接近应用层面的,透过网页前端或手机应用程序,与智能合约进行互动,称作Dapp(Decentralized App) 的开发,也象征着网际网路走向web3.0 的时代。
学习solidity语言,除了看硬生生的官方文件之外,我推荐去玩cryptozombies,我本身就是从这款网页游戏中学习这门语言,听说是连小孩子都能轻易学习的教材。
除了学solidity之外,网路上还有很多方便的开发工具,开发者主要是运用这些工具做测试、自动化部属、串接前端等等。许多网路上的教学文章会使用Truffle + Ganache + web3.js来建置开发环境。但我在这里推荐另一款开发环境的架构,如果是新手直接从hardhat开始也是非常适合的,hardhat的教学文章写得清楚完整,本篇文章使用的程序代码也是从hardhat-hackathon-boilerplate这个专案而来。hardhat使用的开发环境是Waffle + Hardhat + ethers,它帮你把开发环境处理的简单又舒服,让开发者可以专注在开发智能合约上。
OpenZeppelin是很有名的智能合约套件库,开发时可以引入它的智能合约。智能合约很讲究安全性,稍微没写好就可能被骇客钻漏洞,虚拟货币就被盗走了!OpenZeppelin提供的SafeMath很常被引入到专案,对新手来说看OpenZeppelin的合约也是很好的学习管道。此外,官方也建了一个学习网站ethernaut,主要在教导如何写出安全性够强的智能合约,可惜网站在我写这篇文章的时间一直处于维修不能用的状态。
最后再介绍一款实际上线的智能合约专案:Argent。它是一款运用智能合约来做虚拟货币钱包的公司,除了使用他们的钱包之外,也可以看看他们的智能合约是怎么写的,感受一下专业的程序代码架构与写法。
小结
这篇文章希望能帮助到想了解区块链这项技术的人,同时也想呈现一个智能合约的开发生态系,你大可以不必花太多力气去了解密码学、挖矿、节点、共识机制等等五花八门的专有名词;反之,你可以专注在智能合约的开发,或回到本质去思考去中心化的用意、以及为什么不可窜改的特性那么重要。
智能合约除了做虚拟货币之外,也能够做投票系统,原本以货币为起始点的区块链技术,是智能合约的出现扩大了区块链更具弹性的用途,这圈子需要更多的开发者来探勘这片新大陆。
尤其鼓励人文社会科学的人才,无论是哲学、政治、经济、法律或社会等各方领域,试着撇开人工智慧将主导未来社会的发展路线,与之截然不同的另一种形式:人类社会能否依靠科技的力量,促成彼此之间的合作,创造更有效率的市场、更公平的治理方式
声明:本站所提供的资讯信息不代表任何投资暗示, 本站所发布文章仅代表个人观点,仅供参考。