导读:随着区块链成为国家战略,央行也推出数字货币,业界对区块链行业从业人员的需求越来越大;另外最近比特币价格又创新高,去中心化金融 DeFi 应用也非常火热,程序员业余也有开发了解区块链的需求。高可用架构翻译 blockgeeks 的系列文章,帮助大家更好学习及了解区块链开发。本文为第二篇。
对区块链基础及公链开发感兴趣的读者请参阅 如何成为一名区块链开发者(一)
成为区块链开发者 - 里程碑4:学习智能合约开发
如何定义智能合约?
根据维基百科,智能合约是 "一种旨在促进、验证或执行合约的协商或执行的计算机协议"。虽然它是由美国密码学家 Nick Szabo 在 1996 年首次提出,但 Ethereum (以太坊)通常被认为是普及这一概念并使其成为主流的原因。
可以在我们的深度指南中了解更多关于智能合约的信息。
https://blockgeeks.com/guides/smart-contracts/
在智能合约中,我们想要的理想属性是什么?
任何在区块链上运行的东西都需要是不可变的,必须有能力在不影响其完整性的情况下通过多个节点运行。因此,智能合约的功能需要具备三个要素:
确定性(Deterministic)
可终止的(Terminable)
隔离性(Isolated)
特点1:确定性
如果一个程序每次给定的输入都有相同的输出,那么它就是确定性的。例如:如果 3+1=4,那么 3+1 将永远是 4(假设基础相同)。所以当一个程序在不同的计算机中对同一组输入给出相同的输出时,这个程序就被称为确定性程序。
有各种情况,程序可以以非确定性方式运行。
调用非确定性的系统函数。当在程序中调用一个不确定的函数时。
访问不确定的数据资源。如果一个程序在运行时获取数据,而这个数据源是不确定的,那么这个程序就会变成不确定的。比如一个程序获取一个特定查询的前 10 名 Google 搜索。这个列表可能会不断变化。
动态调用。当一个程序调用第二个程序时,就叫做动态调用。由于调用目标只在执行过程中确定,所以它的性质是不确定的。
特征2:可终止
在数理逻辑中有一个错误叫做“停顿问题”。基本上,它表示无法知道一个给定的程序是否能在限定的时间内执行其功能。1936 年,Alan Turing 利用 Cantor's Diagonal Problem 推断出,无法知道一个给定的程序是否能在限定时间内完成。
这对于智能合约来说,这显然是一个问题,因为合约的定义,必须能够在给定的时间限制内终止。我们采取了一些措施来确保有办法从外部“杀死”合约,不进入一个无尽的循环,从而消耗资源。
图灵非完备性 一个图灵非完备的区块链的功能是有限的,代码不能进行跳转及循环。当然也不能进入无尽循环。
步数和计费。一个程序可以简单地跟踪它所走的 "步数",也就是它所执行的指令数量,然后在某一特定步数被执行后终止。另一种方法是计费。在这里,合约的执行需要预先支付一定的费用。每一条指令的执行都需要一定的费用。如果花费的费用超过了预付费用,那么合约就会终止。
定时器:这里有一个预先设定的定时器。如果合约的执行超过了时间限制,那么合约就会被外部中止。
特征#3:隔离性
在区块链中,任何人都可以上传智能合约。然而正因如此,这些合约可能会在有意和无意中包含病毒和 bug。如果合约没有被隔离,这可能会影响整个系统。因此将合约隔离在沙盒中,使整个生态系统免受任何负面影响是至关重要的。
现在我们已经看到了这些功能,重要的是要知道它们是如何执行的。通常,智能合约使用下面两个系统中的一个运行。
让我们比较一下这两者,并确定哪一个生态更好。为了简单起见,我们将比较Ethereum(虚拟机)和Fabric(Docker)。
如果你对 Ethereum 开发特别感兴趣,那么你需要同时学习 solidity 编程语言。
对于任何想要学习如何开发 DAPP(去中心化应用)的人来说,学习 Solidity 是绝对必须的。我们已经有一份详细的指南,你可以在这里阅读 (1)。在这里我们给出一个基本的概述。Solidity 由 Gavin Wood、Christian Reitwiessner、Alex Beregszaszi、Yoichi Hirai 和几位前 Ethereum 核心贡献者开发,以实现在 Ethereum 等区块链平台上编写智能合约。
(1) https://blockgeeks.com/guides/how-to-learn-solidity/
Solidity 是一种特意精简的松散型语言,语法与 ECMAScript(Javascript)非常相似。在 Ethereum 设计原理文档中,有一些关键点需要记住,即我们是在堆栈和内存模型上工作,指令字大小为 32 字节,EVM(Ethereum虚拟机)给我们提供了访问程序 "堆栈" 的机会,它就像一个寄存器空间,我们也可以在这里使用内存地址,程序计数器循环/跳转(用于顺序程序控制)。一个可扩展的临时 "内存 "和一个更永久的 "存储",而这个存储实际上是写入永久区块链的,最重要的是,EVM 要求智能合约内的完全确定性。
如果你有兴趣学习 Solidity,那么你可以在这里查看我们的深度课程。
https://courses.blockgeeks.com/
这一节的行动计划包括:
成为一名区块链开发者 - 里程碑5:进入区块链公司。
作为一名新晋开发者,最重要的事情之一就是融入其中。
访问 Reddit 论坛、Github 页面和 StackExchange,与其他开发者交流,并时刻关注有关该技术的任何消息。
除此之外,了解人们对区块链开发者的要求,对你也会有帮助。公司在招聘时有什么要求?你可以在这里了解这些信息。
https://blockgeeks.com/how-to-hire-a-good-blockchain-developer/
这些信息对于强化你的技能以吸引这些公司非常有用。
成为区块链开发者 - 结论
本文整理了成为区块链开发工程师的大致路线图。当然,仅有这些是不够的,你需要展现更多主动性,并始终处于其中。
如果你正在寻找关于区块链开发的信息资源,那么请点击这里。
https://courses.blockgeeks.com/
祝你在学习区块链途中一切顺利!
英文全文:
https://blockgeeks.com/guides/blockchain-developer/
参考阅读:
本文由高可用架构翻译,技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿。
高可用架构
改变互联网的构建方式